Silverlight 4中是否有办法规定StackPanel
中的所有元素都必须有边距,而不是在每个元素上指定margin="10,0"
?
答案 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有一个儿童系列。您可以使用它来迭代它们并设置边距。