在Silverlight4中,有没有办法规定StackPanel中的所有元素都必须有边距,而不是在每个元素上都指定margin="10,0"?
发布于 2010-12-02 04:39:46
恐怕在XAML中不能直接使用StackPanel进行声明。Silverlight/WPF中的概念哲学是面板不应该修改其子面板的属性。所以你可以实现你自己的面板,或者你可以使用这样的ItemsControl:
<ItemsControl>
<ItemsControl.ItemTemplate>
<DataTemplate>
<ContentPresenter Margin="10,0" Content="{Binding Content}" />
</DataTemplate>
</ItemsControl.ItemTemplate>
[...]
</ItemsControl>默认情况下,ItemsControl使用StackPanel,如果愿意,您可以使用其ItemsPanel属性将另一个面板定义为ItemsPanelTemplate。
发布于 2010-12-02 14:21:59
我的方法是在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中的每个控件将如何应用边距,而无需在每个控件上定义它。
希望这能帮到你。
克里斯·安德森
PS。明目张胆的自我推销--这是基于我的书Pro Business Applications with Silverlight 4 :)中的继承技巧。
发布于 2010-12-02 04:34:50
将stackpanel放在边框元素中,并将边框填充设置为“100”
https://stackoverflow.com/questions/4328741
复制相似问题