WPF样式活动项

WPF样式活动项,wpf,custom-controls,uinavigationbar,Wpf,Custom Controls,Uinavigationbar,我试图在WPF中创建一个可重用的导航样式自定义控件,就像网站上的导航栏一样。它将包含指向我的应用程序中所有主页的链接。此控件可以位于“导航”窗口中所有页面的顶部。在页面上提供一致的外观和感觉,就像一个网站 我的问题是如何将当前页面的链接设置为与其他页面链接不同的样式,以便您可以快速浏览并查看您所在的页面。因为每个页面上的控件都是相同的,所以我需要告诉它哪个页面是“活动”的,并让它适当地设置链接的样式 我的第一个想法是简单地将IsActive属性放在控件上,每个页面一个,然后在页面上将适当的属性设

我试图在WPF中创建一个可重用的导航样式自定义控件,就像网站上的导航栏一样。它将包含指向我的应用程序中所有主页的链接。此控件可以位于“导航”窗口中所有页面的顶部。在页面上提供一致的外观和感觉,就像一个网站

我的问题是如何将当前页面的链接设置为与其他页面链接不同的样式,以便您可以快速浏览并查看您所在的页面。因为每个页面上的控件都是相同的,所以我需要告诉它哪个页面是“活动”的,并让它适当地设置链接的样式

我的第一个想法是简单地将IsActive属性放在控件上,每个页面一个,然后在页面上将适当的属性设置为true。(或者我可以使用一个接受枚举值的属性,而不是使用多个属性)

例如:

<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>

在经历了所有这些背景之后,我的问题来了。这是可行的,但我必须为我拥有的每个页面复制DataTrigger和其中的所有设置程序,因为触发器必须直接引用“IsHomePageActive”属性,该属性只适用于一个链接。因此,我需要为每个链接使用不同的样式,即使其描述的实际样式完全相同(我的意思是,setter是相同的)。唯一的区别是触发器正在监视什么属性


有没有什么方法可以做到这一点(或者有相同的最终结果),而不必使用数百行重复的XAML?

使用主/详细模式(),以列表框(比如)作为主控,以页面作为详细信息如何

然后为列表中的选定项目指定样式

当选择不同的列表项时,页面将发生更改,并且与其他项的外观不同

若您有一个依赖项属性,比如页面从UserControl继承的列表页面,并且有一个字符串标题,那个么您可以使用它

        <ListBox
                 ItemsSource="{Binding Pages}"
                 IsSynchronizedWithCurrentItem="true">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Orientation="Horizontal">
                        <TextBlock Text="{Binding Title}" />
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>

        <ScrollViewer VerticalScrollBarVisibility="Auto"
                      Content="{Binding Pages/}" />

然后只需在列表框中为所选项目设置样式