Silverlight:使元素的所有后代都有边距?

时间:2010-12-01 20:25:56

标签: silverlight xaml

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

4 个答案:

答案 0 :(得分:2)

我担心在XAML中使用StackPanel直接声明不可能。 Silverlight / WPF中的概念哲学是面板不应该修改其子元素的属性。因此,您可以实现自己的Panel,无论如何都可以这样做,或者您可以使用类似的ItemsControl

<ItemsControl>
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <ContentPresenter Margin="10,0" Content="{Binding Content}" />
        </DataTemplate>
    </ItemsControl.ItemTemplate>

    [...]

</ItemsControl>

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

答案 1 :(得分:1)

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

<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中的每个控件如何应用边距,而无需在每个控件上定义它。

希望这会有所帮助......

Chris Anderson

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

答案 2 :(得分:0)

将您的stackpanel放在Border元素中,并将Border Padding设置为“10 0”

答案 3 :(得分:0)

您也可以通过编程方式执行此操作;你的StackPanel有一个儿童系列。您可以使用它来迭代它们并设置边距。