首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Silverlight:让一个元素的所有后代都有边距?

Silverlight:让一个元素的所有后代都有边距?
EN

Stack Overflow用户
提问于 2010-12-02 04:25:56
回答 4查看 366关注 0票数 2

在Silverlight4中,有没有办法规定StackPanel中的所有元素都必须有边距,而不是在每个元素上都指定margin="10,0"

EN

回答 4

Stack Overflow用户

发布于 2010-12-02 04:39:46

恐怕在XAML中不能直接使用StackPanel进行声明。Silverlight/WPF中的概念哲学是面板不应该修改其子面板的属性。所以你可以实现你自己的面板,或者你可以使用这样的ItemsControl

代码语言:javascript
复制
<ItemsControl>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <ContentPresenter Margin="10,0" Content="{Binding Content}" />
        </DataTemplate>
    </ItemsControl.ItemTemplate>

    [...]

</ItemsControl>

默认情况下,ItemsControl使用StackPanel,如果愿意,您可以使用其ItemsPanel属性将另一个面板定义为ItemsPanelTemplate

票数 2
EN

Stack Overflow用户

发布于 2010-12-02 14:21:59

我的方法是在StackPanel的资源中为将在StackPanel中使用的每个控件类型定义隐式样式。若要避免为每个控件类型重复定义值,可以创建一个以FrameworkElement为目标的命名基样式并定义样式,每个控件类型的样式都可以从该样式继承。示例如下:

代码语言:javascript
复制
<StackPanel Orientation="Horizontal">
    <StackPanel.Resources>
        <Style x:Key="CommonStyle" TargetType="FrameworkElement">
            <Setter Property="Margin" Value="10,0" />
        </Style>
        <Style TargetType="Button" BasedOn="{StaticResource CommonStyle}" />
        <Style TargetType="TextBlock" BasedOn="{StaticResource CommonStyle}" />
        <Style TargetType="CheckBox" BasedOn="{StaticResource CommonStyle}" />
    </StackPanel.Resources>

    <Button>Button</Button>
    <TextBlock Text="Text" />
    <CheckBox>Check Box</CheckBox>
</StackPanel>

请注意StackPanel中的每个控件将如何应用边距,而无需在每个控件上定义它。

希望这能帮到你。

克里斯·安德森

PS。明目张胆的自我推销--这是基于我的书Pro Business Applications with Silverlight 4 :)中的继承技巧。

票数 1
EN

Stack Overflow用户

发布于 2010-12-02 04:34:50

将stackpanel放在边框元素中,并将边框填充设置为“100”

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4328741

复制
相关文章

相似问题

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