Why is my Fluent Window title staying centered?

461 Views Asked by At

I'm using the latest version of Fluent.Ribbon. I've been doing some styling, most of which requires completely replacing the Styles and ControlTemplates, but I've hit a snag. The title of my app is centered in the header bar and I can't get it to move to the left.

My visual tree looks like this:

MainWindow
  Grid
    Adorner
      Grid
        DockPanel
          PART_Icon
          PART_RibbonTitleBar
            Grid
              PART_HeaderHolder [ContentPresenter]
                TextBlock
              PART_ItemsContainer
              PART_QuickAccessToolbarHolder

I copied the current version of the Fluent:RibbonTitleBar ControlTemplate and Style into my override xaml for modification, but nothing I do makes any difference (yes it is loading my overriding styles.)

When I use the inspector tool in the app, the only elements I can highlight are the innermost TextBlock, which fits the text exactly with no stretch, and the DockPanel several levels above, which stretches the full window width. In the original window ControlTemplate, which you can see here, The RibbonTitleBar is the last element of the DockPanel which has LastChildFill set. The RibbonTitleBar does have a RenderSize of the full width, but then the Grid below it has a RenderSize of 0,0. Then PART_HeaderHolder inside that has a RenderSize that exactly covers the title text.

It doesn't seem to matter if I set HorizontalAlignment on various elements to Left or Stretch. I also tried changing the innermost Grid to other container types such as DockPanel and StackPanel. Nothing changes anything about the layout.

Here's my style overrides for the RibbonTitleBar. The only change I've made is that I moved the QuickAccessToolbar to the end and permanently collapsed it (if I try deleting it, the app crashes looking for it) and I tried defining some columns on the inner Grid to no avail.

<Style TargetType="{x:Type Fluent:RibbonTitleBar}">
    <Setter Property="Template"
            Value="{DynamicResource RibbonTitleBarControlOverride}" />
    <Setter Property="Focusable"
            Value="False" />
    <Setter Property="VerticalAlignment"
            Value="Top" />
    <Setter Property="HorizontalAlignment"
            Value="Stretch" />
    <Setter Property="HeaderTemplate">
        <Setter.Value>
            <DataTemplate>
                <TextBlock Margin="-2,0"
                           VerticalAlignment="Center"
                           HorizontalAlignment="Stretch"
                           Text="{Binding}"
                           TextWrapping="NoWrap"
                           TextTrimming="CharacterEllipsis" />
            </DataTemplate>
        </Setter.Value>
    </Setter>
</Style>

<ControlTemplate x:Key="RibbonTitleBarControlOverride"
                 TargetType="{x:Type Fluent:RibbonTitleBar}">
    <Grid>
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="*" />
        </Grid.ColumnDefinitions>
        <ContentPresenter Grid.Column="0" x:Name="PART_HeaderHolder"
                          HorizontalAlignment="Left"
                          ContentSource="Header"
                          IsHitTestVisible="False" />

        <Fluent:RibbonContextualGroupsContainer Grid.Column="1" x:Name="PART_ItemsContainer"                                                    
                                                IsItemsHost="True" />

        <ContentPresenter x:Name="PART_QuickAccessToolbarHolder"
                          ContentSource="QuickAccessToolBar" Visibility="Collapsed" />
    </Grid>
    <ControlTemplate.Triggers>
        <Trigger Property="IsCollapsed"
                 Value="True">
            <Setter Property="Visibility"
                    Value="Collapsed"
                    TargetName="PART_ItemsContainer" />
        </Trigger>
        <Trigger Property="HideContextTabs"
                 Value="True">
            <Setter Property="Visibility"
                    Value="Collapsed"
                    TargetName="PART_ItemsContainer" />
        </Trigger>
    </ControlTemplate.Triggers>
</ControlTemplate>
0

There are 0 best solutions below