我在UserControl.Resources
<Style TargetType="{x:Type TextBlock}"> <Setter Property="Foreground" Value="white" /> </Style> <Style TargetType="{x:Type Label}"> <Setter Property="Foreground" Value="white" /> </Style>
因此,在我的DataTemplate
中(请注意我将其余内容删除),我将应用白色文字,而无需更改每个Label
和TextBlock
元素的属性
<DataTemplate x:Key="FileTransferItemTemplate">
<StackPanel Orientation="Vertical">
<StackPanel Orientation="Horizontal">
<Label Content="Transferring With: " />
<TextBlock Text="{Binding Path=OtherUserName, Mode=TwoWay}" />
</StackPanel>
</DataTemplate>
虽然发生了什么(这导致我长时间的噩梦,我认为我是不正确的数据绑定,因为我看不到任何变化),是数据绑定时前景色默认为黑色。我的数据绑定文本在黑色背景上是黑色的,我甚至没有意识到最长的时间。
我可以覆盖此方法的唯一方法是在Foreground="White"
上手动设置TextBlock
。 Label
适用于颜色,因为它不是数据绑定。
为什么会发生这种情况,我该如何解决?
答案 0 :(得分:3)
问题与绑定无关。似乎从DataTemplate内部查找外部定义的默认样式仅适用于从Control派生的元素。由于TextBlock不是从Control派生的,因此找不到您的默认样式。
This page引用了Microsoft提供的以下两个陈述:
这种行为是'按设计',这就是原因。模板被视为 封装边界。这些模板产生的元素下降 在这个边界内。并查找具有匹配的样式 TargetType在此边界处停止。因此repro中的TextBlock 通过模板生成的内容不会获取样式 题。而在模板外定义的TextBlock确实如此。 解决此问题的一种方法是给出一个明确的名称 样式并在TextBlock中通过此名称引用样式 模板。
和
查找时,模板被视为封装边界 对于不是Control的子类型的元素的隐式样式。