Привязать заголовок страницы к текстовому блоку в стиле - PullRequest
1 голос
/ 24 августа 2009

ОК, я определил стиль для окна навигации. Я успешно стилизовал кнопки навигации и даже добавил панировочные листы в меню навигации. Я хочу добавить заголовок страницы рядом с сухарями:

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-страницы). Понятия не имею, почему. Помогите? Как заставить отображать заголовок текущей страницы? Благодарю.

1 Ответ

0 голосов
/ 25 августа 2009

Проблема в том, что в ControlTemplate нет предка типа Page. Элемент управления, к которому вы применяете шаблон к , может иметь предка типа Page, но сам ControlTemplate не знает об этом. Он знает только о предках в своем собственном логическом дереве.

Чтобы помочь решить эту проблему, разработчики WPF добавили расширение разметки TemplateBinding , которое позволяет применять значение свойства в шаблонном элементе управления к свойству в элементе управления. шаблон.

Итак, на NavigationWindow вы должны создать свойство, предоставляющее Title из Page. Затем вы можете использовать следующую разметку для привязки к ней:

Text="{TemplateBinding TitleProperty}"
...