【问题标题】:What is the equivalent of HTML class id's in WPF?WPF 中 HTML 类 id 的等价物是什么?
【发布时间】:2012-01-09 05:30:14
【问题描述】:

我有一些 StackPanel,希望具有相同的宽度。但是,这不应该影响所有的 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 不知道它的 Style(就像当 HTML 与应用于元素的 CSS 规则是分开的)?

我只想为所有相关的 StackPanel 提供相同的类 id,然后应用 类 id 的样式。

【问题讨论】:

    标签: html wpf xaml styles


    【解决方案1】:

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

    但是,如果您想将样式应用于 same 根容器中的 all StackPanel,则可以将 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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

        • 您唯一的其他选择是不设置 TargetType 并将样式单独应用于您希望应用到的每个 TextBlock。
        猜你喜欢
        • 1970-01-01
        • 2015-10-17
        • 2023-03-18
        • 2012-06-29
        • 1970-01-01
        • 2011-04-16
        • 2016-07-26
        • 2018-04-19
        • 2014-04-04
        相关资源
        最近更新 更多