WPF 中的 HTML 类 ID 等效于什么?



我有一些StackPanels我希望有相同的宽度。然而,这不应该影响所有的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,然后应用

不幸的是,这在WPF中是不可能的。最接近于此的是您在示例中所演示的。

然而,如果你想在相同的根容器中对所有 StackPanels应用样式,你可以将style指定为根容器的资源,而不使用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>

这里,样式将应用于SP1SP2,但不应用于SP3

TargetType将自动为该类型的所有对象设置Style。如果你想让一个特定的TextBlock选择退出样式,你可以这样做:

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

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

相关内容

  • 没有找到相关文章

最新更新