找出风格问题的原因

时间:2012-03-22 09:05:39

标签: c# wpf debugging xaml styles

在一个大型WPF项目设置中,按钮上的填充没有任何效果。按钮上没有设置样式,模板等,但仍然不会使用我的填充。

<StackPanel>
    <Button Padding="20, 20">Hello</Button>
</StackPanel>

我在一个全新的项目中试过这个,它就像一个魅力。显然,在项目的某个地方有一些全局样式,模板导致这种情况。在xaml文件中的某个位置,或在某个资源文件中。由于这个项目相当沉重,我经历所有是不可行的。

如何调试?我能看到覆盖填充物的是什么吗?

我试着用Snoop 2.7.0窥探,但它并没有真正告诉我太多。有关如何处理此类错误的任何提示?

修改

我在ValueSource找了一些属性:

  • 填充=本地
  • 的ContentTemplate =默认
  • 模板=风格

5 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

MSDN中的Dependency Property Value Precedence上有一个页面。

为什么重要?很少有人真正了解依赖属性值的优先顺序。

例如,您是否知道您在DP的CoerceValueCallback中设置的任何值都会覆盖任何其他集合?

我建议你过去那个链接并从顶部开始(最强设置,将覆盖任何东西)到底部(最弱的设置,将被任何东西覆盖),那里有一个级别,你的值设置。

但是,嘿,如果你看一下那个名单,你会注意到你已经在第3位了! 本地值。所以你只有2个级别:动画和价值强制;)

答案 2 :(得分:1)

我发现你自己的答案可能也不正确。

无论你在Button对象中放置什么都会覆盖样式中定义的内容。

我猜你在按钮内定义的填充没有做任何事情的原因是因为,在你的默认样式中,ContentPresenter缺少这个,

<ContentPresenter Margin="{TemplateBinding Padding}"

填充是文本和按钮边框之间的距离,即此ContentPresenter的边距。

答案 3 :(得分:0)

这对我有用:

<Button>
    <Button.Content>
        <TextBlock Padding="20" Text="Hello world!" />
    </Button.Content>
</Button>

答案 4 :(得分:0)

此特定问题是由App.xaml中包含的资源中定义的样式引起的。

这里重要的一点是,没有x:Key属性的样式会影响目标类型的所有元素,如here所述。

<Style*TargetType="*Button上执行解决方案范围的外卡搜索,产生了一个可能影响我的按钮的潜在样式列表。我发现一个没有 x:Key属性,只是为了尝试和 voila 而评论它!填充工作。