2009-08-24 3 views
1

OK、ナビゲーションウィンドウのスタイルを定義しました。私はナビゲーションボタンのスタイルを整え、ナビゲーションメニューにページブレッドクラムを追加しました。私が欲しいのは、パンくずリストの次のページのタイトルを追加することです:スタイル内のテキストブロックへのページタイトルのバインド

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にはPageTitleを公開するプロパティを作成する必要があります。そして、あなたはそれにバインドするために、次のマークアップを使用することができます。

Text="{TemplateBinding TitleProperty}" 
+0

私はより具体的にしてみましょう: 私はセッター これはPageWindowTitleと同じナビゲーションウィンドウのタイトルを公開しますが、私が必要とするのはPage.Titleプロパティです。 – Boris

関連する問題