什么是HTML类id';她在WPF吗?

什么是HTML类id';她在WPF吗?,html,wpf,xaml,styles,Html,Wpf,Xaml,Styles,我有一些堆叠面板,我希望有相同的宽度。然而,这不应该影响所有的StackPanel,我不想仅仅为此而子类化。我知道以下是可能的: <Style BasedOn="{StaticResource {x:Type TextBlock}}" TargetType="TextBlock" x:Key="TitleText"> <Setter Property="FontSize" Value="26"/> </Style> ...

我有一些堆叠面板,我希望有相同的宽度。然而,这不应该影响所有的StackPanel,我不想仅仅为此而子类化。我知道以下是可能的:

<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规则是分开的

我只想给所有相关的StackPanel相同的类id,然后申请
将样式设置为类id。

不幸的是,这在WPF中是不可能的。最接近这一点的是您在示例中演示的内容

但是,如果要将样式应用于相同的根容器中的所有堆栈面板,可以将样式指定为根容器的资源,而不使用
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

TargetType将自动在该类型的所有对象上设置样式。如果您想让特定的文本块退出样式,可以这样做:

<TextBlock Style="{x:Null}"></TextBlock>


遗憾的是,没有,但您可以创建一个设置类,然后将样式隐式应用于所有文本块,但在附加的属性上使用
触发器来决定应用哪些设置器。这样做的缺点是,它当然仍然不是很好,但样式的功能也有限,因为您不能在子样式中使用触发器。

您唯一的其他选择是不设置TargetType,而是将样式分别应用于您希望应用的每个文本块。