我使用的是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 here,RibbonTitleBar
是DockPanel
设置LastChildFill
的最后一个元素。 RibbonTitleBar
确实有一个全宽的RenderSize,但是它下方的Grid
的RenderSize为0,0
。然后PART_HeaderHolder
里面有一个完全覆盖标题文本的RenderSize。
如果我将HorizontalAlignment
设置为Left
或Stretch
的各种元素,那似乎并不重要。我还尝试将最里面的Grid
更改为其他容器类型,例如DockPanel
和StackPanel
。什么都没有改变布局。
我的风格优先于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>