我正在尝试在 WPF 中创建可重用的导航样式自定义控件,例如网站上的导航栏。它将包含指向我的应用程序中所有主要页面的链接。这个控件可以放在我的 NavigationWindow 中的所有页面之上。在页面之间提供一致的外观和感觉,例如网站。
我的问题是当前页面链接的样式与其他页面的链接不同,这样您就可以快速浏览它并查看您所在的页面。由于每个页面上的控件都是相同的,我需要告诉它哪个页面是“活动的”,并让它适当地设置该链接的样式。
我的第一个想法是简单地将 Is<Page>Active 属性放在控件上,每个页面一个,然后在页面上将相应的属性设置为 true。(或者我可以使用一个接受 Enum 值的属性,而不是拥有许多属性,无论哪种方式)
例子:
<local:Header IsHomePageActive="True" />
现在在我的 Header Custom Control 的控件模板中,我可以创建一个监视此属性的 DataTrigger:
<Style.Triggers>
<DataTrigger Binding="{Binding RelativeSource FindAncestor, AncestorType={x:Type local:Header}}, Path=IsHomePageActive}" Value="true">
<Setter ... />
<Setter ... />
<Setter ... />
</DataTrigger>
</Style>
在所有这些背景之后,这是我的问题。 这可行,但我将不得不为我拥有的每个页面复制该 DataTrigger 以及其中的所有 Setter,因为触发器必须直接引用仅适用于一个链接的“IsHomePageActive”属性。所以我需要为每个链接使用不同的样式,即使它描述的实际样式完全相同(我的意思是,设置器是相同的)。唯一的区别是触发器正在监视什么属性。
有没有办法做到这一点(或具有相同最终结果的东西),而不会以数百行重复的 XAML 结束?