【问题标题】:Use same style for TextBlock and Run element对 TextBlock 和 Run 元素使用相同的样式
【发布时间】:2011-10-20 12:32:01
【问题描述】:

我有一个 WPF 样式,它为 TargetType: TexBlock 设置 TextDecorations 依赖属性。我需要对某些本身不使用上述样式的 TextBlock 中的某些 Run 元素使用相同的样式。如何在不使用不同的TargetType 重复相同样式的情况下实现这一点?

【问题讨论】:

    标签: .net wpf styles


    【解决方案1】:

    只是不要指定TargetType,而是限定属性,例如:

    <Style x:Key="CommonStyle">
        <Setter Property="Inline.TextDecorations" Value="StrikeThrough" />
    </Style>
    
    <TextBlock Style="{StaticResource CommonStyle}" Text="Lorem Ipsum" />
    <TextBlock>
        <Run Style="{StaticResource CommonStyle}" Text="Lorem" />
        <Run Text="Ipsum" />
    </TextBlock>
    

    如果您想进一步开发可以使用BasedOn 的样式,这也允许通过不对派生样式设置键来隐式应用所述样式。

    【讨论】:

    • 哇。我尝试了同样的事情,但我设置了Property="TextDecorations" 而不是Property="Inline.TextDecorations",并得到错误“FrameworkElement 不包含...”。添加“内联”。确实有效。
    • 我对实现这一点的底层机制感兴趣,您能否提供一些说明或链接?
    • @H.B. - 有没有办法在不反映代码的情况下检测到这一点?是否在 MSDN 中某处提到 TextBlock.TextDecorations '绑架' Inline.TextDecorations
    • @BorisB.: 1. 如果不使用前缀,它将在FrameworkElement 上查找属性,因为该类拥有Style 属性。 2、Run继承Inline的属性,TextBlock重用AddOwner的属性。如果您在不相关的类型上看到两个相同的属性,则始终值得检查一个是否正在使用另一个的属性。反编译器(如ILSpy)很方便。检查类的静态构造函数以获取属性 inits。
    • @Erno:我不这么认为,我总是为此使用反编译器,在 MSDN 上查看,但遗憾的是他们没有分享这些信息。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-14
    • 2022-01-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多