我为 Button 创建了自己的 ControlTemplate,如下所示:
<Style x:Key="LightButtonStyle" TargetType="{x:Type ButtonBase}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ButtonBase}">
<Border
x:Name="WrappingBorder"
Margin="{TemplateBinding Margin}"
...
>
<ContentPresenter
Content="{TemplateBinding Content}"
...
>
</ContentPresenter>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
现在,我注意到当我为按钮设置边距时,例如:
<Button
Style="{StaticResource LightButtonStyle}"
Margin="20"
>
Hello world!
</Button>
该按钮实际上有双 Margin - 40。我假设控件实际上应该从不使用 Margin,并且 Margin 属性在排列阶段仅由按钮的祖先读取。然后我查看了 WPF 默认样式,发现没有一个使用 Margin。
这是正确的结论(Margin 只能由容器正确排列)吗?换句话说,每次我在我的风格中使用 {TemplateBinding Margin} 时,我会得到双倍边距吗?是否有一些我的控件不应该使用的类似属性列表(因为它们仅适用于“周围世界”)?
你能把我指向解释这一点的 MSDN 页面吗?谢谢!
编辑:
我想我应该在http://msdn.microsoft.com/en-us/library/ms745058.aspx和http://msdn.microsoft.com/en-us/library/ms751709.aspx中找到答案,但我没有'不认为他们明确提到使用 Margin 属性的从来不是控件,它始终是祖先或 wpf 系统评估它并使用它来影响布局......