Silverlight:使一个元素的所有子元素都有一个边距?
Silverlight 4中是否有办法规定Silverlight:使一个元素的所有子元素都有一个边距?,silverlight,xaml,Silverlight,Xaml,Silverlight 4中是否有办法规定StackPanel中的所有元素必须有边距,而不是在每个元素上指定margin=“10,0”?将StackPanel放在边框元素中,并将边框填充设置为“10 0”恐怕不能直接在XAML中使用StackPanel声明。Silverlight/WPF的概念哲学是,面板不应修改其子级的属性。因此,您可以实现自己的面板,也可以使用ItemsControl,如下所示: <ItemsControl> <ItemsControl.ItemTe
StackPanel
中的所有元素必须有边距,而不是在每个元素上指定margin=“10,0”
?将StackPanel放在边框元素中,并将边框填充设置为“10 0”恐怕不能直接在XAML中使用StackPanel
声明。Silverlight/WPF的概念哲学是,面板不应修改其子级的属性。因此,您可以实现自己的面板,也可以使用ItemsControl
,如下所示:
<ItemsControl>
<ItemsControl.ItemTemplate>
<DataTemplate>
<ContentPresenter Margin="10,0" Content="{Binding Content}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
[...]
</ItemsControl>
[...]
ItemsControl
使用StackPanel
默认情况下,您可以使用其ItemsPanel
属性将另一个面板定义为ItemsPanelTemplate
,如果您愿意的话。您也可以通过编程方式执行此操作;您的StackPanel有一个子集合。您可以使用它来迭代它们并设置边距。我的方法是在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中的每个控件将如何应用边距,而无需在每个控件上定义边距
希望这有助于
克里斯·安德森
注:明显的自我提升-这是基于我书中的继承技巧:)。您还可以通过将其
ItemsPanel
指定为StackPanel,确保ItemsControl的行为类似于StackPanel。尽管这可能是默认情况。至少这样可以控制方向。为什么StackPanel有边距属性时需要边框?这也没有考虑在每个孩子之间放置边距,OP可能希望这样做。