我有一些StackPanels我希望有相同的宽度。但是这不应该影响所有StackPanels,我不想为此子类化。我知道以下是可能的:
<Style BasedOn="{StaticResource {x:Type TextBlock}}"
TargetType="TextBlock"
x:Key="TitleText">
<Setter Property="FontSize" Value="26"/>
</Style>
...
<TextBlock Style="{StaticResource TitleText}">
Some Text
</TextBlock>
但有没有办法让TextBlock不知道它的风格(就像它的时候一样) HTML与适用于元素的CSS规则是分开的吗?
我只想给所有相关的StackPanels提供相同的类ID,然后再申请 类id的样式。
答案 0 :(得分:4)
不幸的是,这在WPF中是不可能的。你能得到的最接近的就是你在你的例子中所展示的内容。
但是,如果要将样式应用于相同根容器中的所有 StackPanels,则可以将样式指定为根容器的资源, x:Key
属性。举个例子:
<Grid x:Name="LayoutRoot">
<Grid x:Name="StackPanelsRoot">
<Grid.Resources>
<Style TargetType="StackPanel">
...
</Style>
</Grid.Resources>
<StackPanel x:Name="SP1" ... />
<StackPanel x:Name="SP2" ... />
...
</Grid>
<StackPanel x:Name="SP3" ... />
...
</Grid>
此处,样式将应用于SP1
和SP2
,但不会应用于SP3
答案 1 :(得分:1)
可悲的是没有,但您可以创建attached property来设置类,然后隐式地将样式应用于所有文本块,但在该附加属性上使用Triggers
来决定应用哪些setter。这样做的缺点是它当然还不是很好,但是风格的功能也是有限的,因为你不能在子代中使用触发器。
答案 2 :(得分:0)
TargetType将自动在该类型的所有对象上设置样式。如果您希望特定的TextBlock选择退出该样式,您可以这样做:
<TextBlock Style="{x:Null}"></TextBlock>