Web サイトのナビゲーション バーのように、WPF で再利用可能なナビゲーション スタイルのカスタム コントロールを作成しようとしています。アプリ内のすべてのメイン ページへのリンクが含まれます。このコントロールは、NavigationWindow 内のすべてのページの上に配置できます。Web サイトのように、ページ全体で一貫したルック アンド フィールを提供します。
私の問題は、現在のページのリンクを他のページのリンクとは異なるスタイルにすることです。これにより、すぐにそれを見て、どのページにいるのかがわかります。コントロールは各ページで同じであるため、どのページが「アクティブ」であるかを伝え、適切にリンクするようにスタイルを設定する必要があります。
私が最初に考えたのは、Is<Page>Active プロパティを各ページに 1 つずつコントロールに配置し、そのページで適切なプロパティを true に設定することでした。(または、多くのプロパティを持つ代わりに、Enum 値を受け入れる 1 つのプロパティを使用することもできます)
例:
<local:Header IsHomePageActive="True" />
ヘッダー カスタム コントロールのコントロール テンプレートで、このプロパティを監視する DataTrigger を作成できます。
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource FindAncestor, AncestorType={x:Type local:Header}}, Path=IsHomePageActive}" Value="true">
<Setter ... />
<Setter ... />
<Setter ... />
</DataTrigger>
</Style>
そのすべての背景の後、ここに私の質問があります。 これは機能しますが、トリガーは 1 つのリンクにのみ適用される「IsHomePageActive」プロパティを直接参照する必要があるため、DataTrigger とその中のすべての Setter を複製する必要があります。そのため、実際の STYLE がまったく同じであるにもかかわらず (つまり、Setter は同じです)、リンクごとに異なる Style が必要です。唯一の違いは、トリガーが監視しているプロパティです。
何百行もの XAML が重複してしまうことなく、これを行う方法 (または同じ最終結果を持つもの) はありますか?