C# 为textblock元素的子文本绑定前景属性

C# 为textblock元素的子文本绑定前景属性,c#,.net,wpf,xaml,C#,.net,Wpf,Xaml,我发现,我无法将textblock中包含的文本的前景设置为子文本(与通过textblock上的文本属性设置的文本相反),只需使用父textblock上的前景属性即可。我已经尝试设置属性TextElement.前台和Run.前台,但都不起作用。有人知道这种情况下的首选方法吗 以下是我迄今为止的代码: <TextBlock Foreground="{Binding ForegroundColor}"> Sample<LineBreak/>Text

我发现,我无法将textblock中包含的文本的前景设置为子文本(与通过textblock上的文本属性设置的文本相反),只需使用父textblock上的前景属性即可。我已经尝试设置属性
TextElement.前台
Run.前台
,但都不起作用。有人知道这种情况下的首选方法吗

以下是我迄今为止的代码:

    <TextBlock Foreground="{Binding ForegroundColor}">
          Sample<LineBreak/>Text
    </TextBlock>

样本文本

编辑:这里有一个有趣的转折点:如果我去掉
,前景设置很好

请确保应用程序中没有定义隐式运行样式:

<Style TargetType="Run">
     <Setter Property="Foreground" Value="Gray" />
</Style>

这将覆盖父文本块的前景设置

如果您这样做,您可以向TextBlock添加隐式运行样式:

<TextBlock>
     <TextBlock.Resources>
         <Style TargetType="Run">
             <Setter Property="Foreground" Value="Orange" />
         </Style>
     </TextBlock.Resources>
    Sample<LineBreak/>Text
</TextBlock>

样本文本

什么类型是
ForegroundColor
?对我来说,如果你的XAML是
画笔
(因为
TextBlock.Foreground
画笔
),那么它就可以工作——但如果
ForegroundColor
颜色
,显然就不行了。绑定属性ForegroundColor是画笔。也许它正被一种全球风格所压倒?我对此表示怀疑;元素上的属性优先于样式设置器,我只是测试了它以确保它。当您尝试将其设置为笔刷名称字符串而不是绑定时会发生什么?e、 g.
前台=“橙色”
这是因为没有创建“示例”和“文本”运行元素。更多信息请参见我的答案。我可以用@mm8的答案重现这个问题。这很有意义:使用
LineBreak
,它必须隐式地将文本分成
Run
LineBreak
Run
。仅使用文本,不需要创建运行。是的,这似乎是问题所在。我取消了父控件中的运行方式,问题就消失了:
谢谢大家的帮助。