2009-08-24 2 views
1

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

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

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

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

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

Text="{TemplateBinding TitleProperty}" 
+0

Позвольте мне быть более конкретным: Я поставил сеттер Boris

 Смежные вопросы

  • Нет связанных вопросов^_^