如何让样式覆盖其他属性

时间:2012-11-28 22:44:21

标签: c# wpf xaml

<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”会覆盖我的规则。

3 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:2)

当你以这种方式使用时,你不能阻止人们覆盖你的财产。

可能能够执行此操作的唯一方法是基于Rectangle(或您想要的任何对象)创建用户控件,并且不公开相关属性。但是,这并不能阻止人们直接使用Rectangle

答案 2 :(得分:1)

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