WPF中HTML类ID的等价物是什么?

时间:2011-11-29 21:45:29

标签: html wpf xaml styles

我有一些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的样式。

3 个答案:

答案 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>

此处,样式将应用于SP1SP2,但不会应用于SP3

答案 1 :(得分:1)

可悲的是没有,但您可以创建attached property来设置类,然后隐式地将样式应用于所有文本块,但在该附加属性上使用Triggers来决定应用哪些setter。这样做的缺点是它当然还不是很好,但是风格的功能也是有限的,因为你不能在子代中使用触发器。

答案 2 :(得分:0)

TargetType将自动在该类型的所有对象上设置样式。如果您希望特定的TextBlock选择退出该样式,您可以这样做:

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