【问题标题】:How to Let Style Overwrite Other Properties如何让样式覆盖其他属性
【发布时间】:2013-05-25 01:44:54
【问题描述】:
<ResourceDictionary>
    <Style x:Key="Frame0" TargetType="Shape">
        <Setter Property="Stroke" Value="Transparent" />
        <Setter Property="StrokeThickness" Value="0" />
    </Style>
</ResourceDictionary>

<Canvas x:Name="canvas" Height="346" Width="643">
    <Rectangle Style="{StaticResource Frame0}" Stroke="Red" StrokeThickness="2" Height="77" Canvas.Left="26" Canvas.Top="13" Width="119" />
</Canvas>

我希望任何使用我的资源字典的人始终遵守我的规则。我的风格应该放在第一位。如何做到这一点?目前,Stroke="Red"StrokeThickness="2" 会覆盖我的规则。

【问题讨论】:

    标签: c# wpf xaml


    【解决方案1】:

    据我所知,没有办法让样式值覆盖本地值。查看order of precedence,您会看到本地值在列表中排在第三位,前面只有coerced values, and values from active animations

    如果您确实需要全局强制该值,那么您可以考虑制作一个派生控件,在相应的依赖属性中设置coerced values

    【讨论】:

      【解决方案2】:

      当人们以这种方式使用您的属性时,您无法阻止他们覆盖您的属性。

      可能能够做到这一点的唯一方法是创建一个基于Rectangle(或您想要的任何对象)的用户控件,并且不公开相关属性。然而,这并不能阻止人们直接使用Rectangle

      【讨论】:

        【解决方案3】:

        顺序真的很重要。 样式的优先级最低,这意味着任何人都可以覆盖它。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-04-14
          • 1970-01-01
          • 2013-06-10
          • 1970-01-01
          相关资源
          最近更新 更多