好的,我已经为导航窗口定义了一种样式。我已经成功设置了导航按钮的样式,甚至还在页面导航菜单中添加了页面痕迹。我想要的是在面包屑旁边添加页面标题:
Style x:Key="{x:Type NavigationWindow}" TargetType="NavigationWindow">
<Setter Property="SnapsToDevicePixels" Value="true"/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="NavigationWindow">
<DockPanel Background="{StaticResource WindowBackgroundBrush}">
...
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition Width="16"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
....
<StackPanel Grid.Column="4" Orientation="Horizontal">
<TextBlock Foreground="Gray"
VerticalAlignment="Center"
Text="{Binding Path=Title,
RelativeSource={RelativeSource FindAncestor,
AncestorType={x:Type Page}}}" />
</StackPanel>
</Grid>
</DockPanel>
...
</ControlTemplate>
</Setter.Value>
</Setter>
绑定不适用于最后一个TextBlock。 (但是如果没有在样式中使用它可以正常工作,但在常规的XAML页面代码隐藏中)我不知道为什么。救命?如何让它显示当前页面标题?谢谢。
答案 0 :(得分:0)
问题是在ControlTemplate
内,没有Page
类型的祖先。 将模板应用于的控件可能具有类型为Page的祖先,但ControlTemplate
本身并不知道。它只知道它自己的逻辑树中的祖先。
为了帮助缓解此问题,WPF设计人员添加了TemplateBinding标记扩展,允许您将模板化控件上的属性值应用于控件模板中的属性。
因此,在NavigationWindow
上,您应该创建一个公开Title
Page
的属性。然后,您可以使用以下标记绑定到它:
Text="{TemplateBinding TitleProperty}"