【问题标题】:Shared styling in WPFWPF 中的共享样式
【发布时间】:2014-12-03 10:28:10
【问题描述】:

如果我想让 UserControl 或 UserControl 的部分中的所有 TextBlock 元素都具有 FontWeight="Bold"TextAlignment="Right" 怎么办?是否可以在一定范围内为TextBlock 元素设置一些样式,这样我就不必重复所有这些属性?

【问题讨论】:

    标签: wpf styling


    【解决方案1】:

    是的,创建一个没有x:Key 的样式,它将应用于该范围内指定TargetType 的所有项目

    例如,要使所有 TextBlock 仅在特定的 UserControl 内具有 FontWeight="Bold"TextAlignment="Right",您可以使用以下内容:

    <UserControl.Resources>
        <Style TargetType="{x:Type TextBlock}">
            <Setter Property="FontWeight" Value="Bold" />
            <Setter Property="TextAlignment" Value="Right" />
        </Style>
    </UserControl.Resources>
    

    【讨论】:

    • 谢谢。艰难的决定,但你的答案是一样的,@Vlad 领先你几秒钟。
    【解决方案2】:

    如果你把它放在你的资源中,你所有的文本块都会变成一样的。

    <Style TargetType="{x:Type TextBlock}">
        <Setter Property="FontWeight" Value="Bold"/>
        <Setter Property="TextAlignment" Value="Right"/>
    </Style>
    

    或者,您也可以从TextBlock(例如BoldTextBlock)继承并将其用作目标类型。这样您就可以在与特殊文本块相同的控件中使用常规文本块

    <Style TargetType="{x:Type BoldTextBlock}">
        <Setter Property="FontWeight" Value="Bold"/>
        <Setter Property="TextAlignment" Value="Right"/>
    </Style>
    

    【讨论】:

    • 对于奖励积分,我怎么能像Grid.Column 这样的东西做到这一点。它似乎不像你在上面向我展示的那样工作。
    • 不确定您对Grid.Column 的含义。您的意思是使用特定样式来表示...只有一列?这有帮助吗? stackoverflow.com/a/853082/1732567
    • 我希望我的所有 TextBlock 元素都在网格列 0 中。它们是标签 - 它们的输入元素都在网格列 1 中。我也想避免重复所有这些标记。跨度>
    • @ProfK 为此,您可以在Style.Trigger 中使用&lt;Trigger&gt;。有关示例,请参见 this post
    猜你喜欢
    • 2010-10-28
    • 1970-01-01
    • 2011-03-12
    • 1970-01-01
    • 1970-01-01
    • 2021-08-26
    • 2013-05-15
    • 1970-01-01
    • 2015-08-29
    相关资源
    最近更新 更多