假设我有两个不同的,不同的堆栈面板(我们称之为SPA和SPB),每个面板都有10个文本块作为子元素.SPA中的所有文本块都应使用一种样式,SPB中的所有文本块都应使用另一种样式.实现此目的的一种方法是在参考资料中声明两个样式,然后附加Style="style1"
到第一个堆栈面板中的所有10个文本块,并附Style="style2"
加到第二个中的所有10个文本块.但是,似乎应该有一些简单的方法将样式附加到stackpanel本身,以某种方式告诉stackpanel将它应用于所有子文本块的子元素.反正有没有这样做?
我自然而然地寻找这个解决方案的原因是因为这正是你用CSS在HTML中做同样的事情,我希望XAML会有类似的功能.
谢谢!
PS我正在使用Silverlight,但我猜我的情况和任何解决方案(如果有的话)一般都适用于XAML/WPF.
Sco*_* M. 61
在主容器的资源部分中,为您的样式添加x:Key
属性和目标类型TextBlock
.然后在每个资源部分中,StackPanel
您可以将BasedOn
属性设置为主样式的键的样式(不要忘记使用StaticResource绑定,而不仅仅是键的名称),然后说出TargetType="{x:Type TextBlock}"
并结束标记.这应该将样式带入StackPanel并设置所有TextBlocks的样式.
<Window ...>
<Window.Resources>
<Style x:Key="tbstyle" TargetType="{x:Type TextBlock}">
<!-- put setters here -->
</Style>
</Window.Resources>
<StackPanel name="SPA">
<StackPanel.Resources>
<Style BasedOn="{StaticResource tbstyle}" TargetType="{x:Type TextBlock}" />
</StackPanel.Resources>
<TextBlock ... />
<TextBlock ... />
<TextBlock ... />
<TextBlock ... />
<TextBlock ... />
</Stackpanel>
<StackPanel name="SPB">
<StackPanel.Resources>
<Style BasedOn="{StaticResource tbstyle}" TargetType="{x:Type TextBlock}" />
</StackPanel.Resources>
<TextBlock ... />
<TextBlock ... />
<TextBlock ... />
<TextBlock ... />
<TextBlock ... />
</StackPanel>
</Window>
Run Code Online (Sandbox Code Playgroud)
dec*_*one 14
<StackPanel>
<StackPanel.Resources>
<Style TargetType="TextBlock">
<Setter Property="Margin"
Value="5" />
</Style>
</StackPanel.Resources>
<TextBlock Text="Text" />
<TextBlock Text="Text" />
<TextBlock Text="Text" />
<TextBlock Text="Text" />
</StackPanel>
Run Code Online (Sandbox Code Playgroud)