首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >WPF:为什么我不应该在TemplateBinding中使用{ ControlTemplate边距}--边距是否仅用于元素的容器?

WPF:为什么我不应该在TemplateBinding中使用{ ControlTemplate边距}--边距是否仅用于元素的容器?
EN

Stack Overflow用户
提问于 2010-01-05 15:12:21
回答 2查看 2.9K关注 0票数 9

我为Button创建了自己的ControlTemplate,如下所示:

代码语言:javascript
运行
复制
<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>

现在,我注意到当我为我的按钮设置页边距时,就像:

代码语言:javascript
运行
复制
<Button 
    Style="{StaticResource LightButtonStyle}"
    Margin="20"
    >
    Hello world!
</Button>

这个按钮实际上有双倍的保证金- 40。实际上,我假设控件应该永远不使用phase,而during属性仅由按钮的祖先在排列阶段读取。然后,我研究了WPF的默认样式,发现没有人使用保证金。

这是正确的结论吗(只有容器才能正确地安排保证金)?换句话说,每次在我的风格中使用{TemplateBinding边距}时,我都会得到双边距吗?,是否有一些我的控件不应该使用的类似属性列表(因为它们仅用于“周围世界”)?

你能给我指一下解释这一点的MSDN页面吗?谢谢!

编辑:

我想我应该在http://msdn.microsoft.com/en-us/library/ms745058.aspxhttp://msdn.microsoft.com/en-us/library/ms751709.aspx中找到答案,但我想他们并没有明确地提到是从不使用控件,而是始终是祖先或wpf系统对其进行估值并使用它来影响布局……

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-01-05 15:37:18

您的结论是正确的,如果您查看提供的默认模板的框架,您将看到模板中的Margin绑定到控件的Padding属性。

票数 7
EN

Stack Overflow用户

发布于 2010-01-05 17:21:14

边距由布局系统自动应用,在控件模板中应该使用填充。

代码语言:javascript
运行
复制
<Border x:Name="WrappingBorder" Margin="{TemplateBinding Padding}" ... />
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2006872

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档