【问题标题】:Can I apply a style to a XAML element based on what parent element it has?我可以根据 XAML 元素具有的父元素将样式应用于它吗?
【发布时间】:2012-11-13 13:39:06
【问题描述】:

在元素的父元素类型上应用样式的正确方法是什么,即。 e.仅当它们是某些其他元素的子元素时?

就我而言,我想应用一些精确的按钮宽度和高度,但前提是这些按钮是堆栈面板的直接子级。此外,应将第二种样式应用于这些按钮(字形)中的图像。

  • 如何定义只影响堆栈面板上的按钮而不影响直接放置在网格上的按钮的按钮样式?
  • 是否可以添加其他条件,例如只有带有orientation="horizontal"的堆栈面板
  • 我能否定义“树条件”,例如仅在 [水平] 堆栈面板上的按钮上显示图像

由于我的应用程序中 90% 的按钮都是堆栈面板上的按钮,因此到目前为止,我已将样式应用于所有按钮和图像,并在必要时覆盖它。但这不是最好的解决方案,不是吗?

最好,该解决方案将处理样式定义中的所有条件,这样我就不必将该样式显式分配给我的每个堆栈面板。

【问题讨论】:

    标签: xaml styles conditional-statements controltemplate


    【解决方案1】:
    <StackPanel>
       <StackPanel.Resources>
          <Style x:Key="Rectangle1" TargetType="Rectangle">
            <Setter Property="Stroke" Value="Black" />
            <Setter Property="Fill" Value="White" />                                            
          </Style>                                      
       </StackPanel.Resources>
       <UniformGrid Columns="10">
          <UniformGrid.Resources>
             <Style TargetType="Rectangle" BasedOn="{StaticResource Rectangle1}">
                <Setter Property="Fill" Value="Red" />                                          
         </Style>                                       
          </UniformGrid.Resources>
    
        </UniformGrid>
    </StackPanel>
    

    【讨论】:

    • 如果您可以编辑您的帖子以包含一些简短的解释,将会很有帮助。
    • 对不起,我不明白这与我的问题有什么关系。我知道我可以覆盖基本样式的设置器。但是我的问题是问我是否可以以要求某些父元素类型让整个样式完全应用的形式向我的唯一样式定义添加条件,就像我在一个地方有我的样式定义一样,它是应用于某些元素的子元素,但不适用于所有其他元素的子元素。
    猜你喜欢
    • 2017-03-28
    • 2015-11-09
    • 2011-07-25
    • 1970-01-01
    • 2011-01-20
    • 2014-02-10
    相关资源
    最近更新 更多