C# 为textblock元素的子文本绑定前景属性
我发现,我无法将textblock中包含的文本的前景设置为子文本(与通过textblock上的文本属性设置的文本相反),只需使用父textblock上的前景属性即可。我已经尝试设置属性C# 为textblock元素的子文本绑定前景属性,c#,.net,wpf,xaml,C#,.net,Wpf,Xaml,我发现,我无法将textblock中包含的文本的前景设置为子文本(与通过textblock上的文本属性设置的文本相反),只需使用父textblock上的前景属性即可。我已经尝试设置属性TextElement.前台和Run.前台,但都不起作用。有人知道这种情况下的首选方法吗 以下是我迄今为止的代码: <TextBlock Foreground="{Binding ForegroundColor}"> Sample<LineBreak/>Text
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
。仅使用文本,不需要创建运行。是的,这似乎是问题所在。我取消了父控件中的运行方式,问题就消失了:
谢谢大家的帮助。