我正在尝试将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将样式设置为动态资源并包含样式触发器的外观是什么。
感谢您提供的任何帮助。
答案 0 :(得分:1)
您不能将两种不同的样式添加到一个单一控件中,而您必须将其合而为一!
<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>}">
答案 1 :(得分:0)
如前所述,您设置了两次样式。不要这样做,请使用basedon来添加您拥有的样式作为资源。
<ContentControl>
<ContentControl.Style>
<Style TargetType="ContentControl" BasedOn="{StaticResource RibbonGroup}">