【发布时间】:2023-04-05 16:01:01
【问题描述】:
我已经为 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 系统......
【问题讨论】:
标签: wpf layout controltemplate margin