首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在WPF中设置样式和样式触发器

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

Stack Overflow用户
提问于 2019-03-01 02:46:12
回答 2查看 3.1K关注 0票数 1

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

代码语言:javascript
复制
<ContentControl  Style="{DynamicResource RibbonGroup}">
   ...
</ContentControl>

如果我想给content控件添加一个样式触发器,我可以这样做:

代码语言:javascript
复制
<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>

如果我尝试将它们组合在一起来设置控件的样式,并有一个如下的触发器:

代码语言:javascript
复制
<ContentControl  Style="{DynamicResource RibbonGroup}">
  <ContentControl.Style>
   <Style TargetType="ContentControl">
    <Style.Triggers>
      <DataTrigger Binding="{Binding Path=ShowImport}" Value="True">
...

这个XAML创建了一个错误,指出属性"Style“被多次设置。

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

感谢你能提供的任何帮助。

EN

回答 2

Stack Overflow用户

发布于 2019-03-01 04:08:29

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

代码语言:javascript
复制
 <ContentControl>
    <ContentControl.Style>
           <Style TargetType="ContentControl" BasedOn="{StaticResource RibbonGroup}">
票数 2
EN

Stack Overflow用户

发布于 2019-03-01 15:11:09

你不能将两种不同的风格添加到一个单独的控件中,你必须在一个控件中完成!

代码语言:javascript
复制
<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属性,如下所示:

代码语言:javascript
复制
<Style TargetType="ContentControl" BasedOn="{StaticResource <X:Key_From_Base_Style>}">
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54932303

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档