在一个大型WPF项目设置中,按钮上的填充没有任何效果。按钮上没有设置样式,模板等,但仍然不会使用我的填充。
<StackPanel>
<Button Padding="20, 20">Hello</Button>
</StackPanel>
我在一个全新的项目中试过这个,它就像一个魅力。显然,在项目的某个地方有一些全局样式,模板导致这种情况。在xaml文件中的某个位置,或在某个资源文件中。由于这个项目相当沉重,我经历所有是不可行的。
如何调试?我能看到覆盖填充物的是什么吗?
我试着用Snoop 2.7.0窥探,但它并没有真正告诉我太多。有关如何处理此类错误的任何提示?
我在ValueSource找了一些属性:
答案 0 :(得分:1)
DependencyPropertyHelper.GetValueSource方法怎么样?
http://msdn.microsoft.com/en-us/library/system.windows.dependencypropertyhelper.getvaluesource.aspx
答案 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 而评论它!填充工作。