如何在WPF中设置样式和样式触发器

如何在WPF中设置样式和样式触发器,wpf,app.xaml,Wpf,App.xaml,我正在尝试将WPF内容控件的样式设置为动态资源。我很容易做到这一点: <ContentControl Style="{DynamicResource RibbonGroup}"> ... </ContentControl> ... 如果要向内容控件添加样式触发器,可以执行以下操作: <ContentControl> <ContentControl.Style> <Style TargetType="ContentCon

我正在尝试将WPF内容控件的样式设置为动态资源。我很容易做到这一点:

<ContentControl  Style="{DynamicResource RibbonGroup}">
   ...
</ContentControl>

...
如果要向内容控件添加样式触发器,可以执行以下操作:

<ContentControl>
  <ContentControl.Style>
   <Style TargetType="ContentControl">
    <Style.Triggers>
      <DataTrigger Binding="{Binding Path=ShowImport}" Value="True">
        <Setter Property="Visibility" Value="Visible"/>
      </DataTrigger>
      <DataTrigger Binding="{Binding Path=ShowImport}" Value="False">
        <Setter Property="Visibility" Value="Collapsed"/>
      </DataTrigger>
    </Style.Triggers>
  </Style>
  ...
</ContentControl>

...
如果我尝试组合这些元素来设置控件样式,并使用如下触发器:

<ContentControl  Style="{DynamicResource RibbonGroup}">
  <ContentControl.Style>
   <Style TargetType="ContentControl">
    <Style.Triggers>
      <DataTrigger Binding="{Binding Path=ShowImport}" Value="True">
...

...
此XAML创建了一个错误,表示属性“样式”设置了多次

XAML将样式设置为动态资源并包含样式触发器是什么样子的


感谢您提供的帮助。

正如上面所说,您设置了两次样式。如果不这样做,请使用basedon将其添加到作为资源的样式中

 <ContentControl>
    <ContentControl.Style>
           <Style TargetType="ContentControl" BasedOn="{StaticResource RibbonGroup}">

你不能在一个控件中添加两种不同的样式,你必须在一个控件中添加

<ContentControl>
  <ContentControl.Style>
   <Style TargetType="ContentControl">
    <Style.Triggers>
      <DataTrigger Binding="{Binding Path=ShowImport}" Value="True">
        <Setter Property="Visibility" Value="Visible"/>
      </DataTrigger>
      <DataTrigger Binding="{Binding Path=ShowImport}" Value="False">
        <Setter Property="Visibility" Value="Collapsed"/>
      </DataTrigger>
    </Style.Triggers>
  </Style>
  ...
  <Style.Triggers>
    <DataTrigger Binding="{Binding Path=ShowImport}" Value="True">
  ...
</ContentControl>

...
...
但是,您似乎希望创建两个共享某些属性的样式。在本例中,您可以创建BaseStyle和secund样式,在其中添加BasedOn属性,如下所示:

<Style TargetType="ContentControl" BasedOn="{StaticResource <X:Key_From_Base_Style>}">


谢谢你的建议。我使用的是DynamicSource。不确定这里的StaticResource和DynamicSource是否可以互换。谢谢Andy,我尝试了这个方法,结果是运行时错误:无法在类型为“Style”的“BasedOn”属性上设置“DynamicResourceExtension”。只能对DependencyObject的DependencyProperty设置“DynamicResourceExtension”。Source=PresentationFramework。很抱歉,我不明白这个错误的意思。这意味着我忘记了basedon只与staticresource一起工作。