为什么我的Fluent Window标题保持居中?

时间:2017-08-04 23:57:12

标签: wpf xaml controltemplate fluent-ribbon

我使用的是Fluent.Ribbon的最新版本。我一直在做一些造型,其中大部分需要完全取代Styles和ControlTemplates,但我遇到了麻烦。我的应用程序的标题位于标题栏的中心位置,我无法将其移至左侧。

我的视觉树看起来像这样:

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

我将Fluent:RibbonTitleBar ControlTemplate和Style的当前版本复制到我的覆盖xaml进行修改,但我没有做任何改变(是的,它正在加载我的重写样式。)

当我在应用程序中使用检查器工具时,我可以突出显示的唯一元素是最里面的TextBlock,它恰好适合没有拉伸的文本,以及DockPanel上面的几个级别,整个窗口宽度。在原始窗口ControlTemplate中,您see hereRibbonTitleBarDockPanel设置LastChildFill的最后一个元素。 RibbonTitleBar确实有一个全宽的RenderSize,但是它下方的Grid的RenderSize为0,0。然后PART_HeaderHolder里面有一个完全覆盖标题文本的RenderSize。

如果我将HorizontalAlignment设置为LeftStretch的各种元素,那似乎并不重要。我还尝试将最里面的Grid更改为其他容器类型,例如DockPanelStackPanel。什么都没有改变布局。

我的风格优先于RibbonTitleBar。我所做的唯一改变是我将QuickAccessToolbar移动到最后并永久折叠它(如果我尝试删除它,应用程序崩溃寻找它)我尝试在内部Grid上定义一些列无济于事。

<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 个答案:

没有答案