Wpf 当值使用绑定时,样式将被重写

Wpf 当值使用绑定时,样式将被重写,wpf,xaml,binding,styles,Wpf,Xaml,Binding,Styles,在我的UserControl.Resources中设置了两种样式 然而,当数据被绑定时,前景颜色默认为黑色(这让我做了一个长期的噩梦,我认为我的数据绑定不正确,因为我看不到任何更改)。我的数据绑定文本在黑色背景上是黑色的,我甚至有很长一段时间没有意识到这一点 我可以覆盖此设置的唯一方法是在文本块上手动设置前台=“白色”。标签适用于该颜色,因为它不是数据绑定的 为什么会发生这种情况,我如何修复它?问题与绑定无关。从DataTemplate内部查找外部定义的默认样式似乎只适用于从控件派生的元素。由于

在我的
UserControl.Resources中设置了两种样式

然而,当数据被绑定时,前景颜色默认为黑色(这让我做了一个长期的噩梦,我认为我的数据绑定不正确,因为我看不到任何更改)。我的数据绑定文本在黑色背景上是黑色的,我甚至有很长一段时间没有意识到这一点

我可以覆盖此设置的唯一方法是在
文本块上手动设置
前台=“白色”
标签
适用于该颜色,因为它不是数据绑定的


为什么会发生这种情况,我如何修复它?

问题与绑定无关。从DataTemplate内部查找外部定义的默认样式似乎只适用于从控件派生的元素。由于TextBlock不是从控件派生的,因此找不到默认样式

引用微软的以下两项声明:

这种行为是“设计的”,这就是为什么。模板被视为 封装边界。由这些模板生成的元素将下降 在这个边界内。并查找具有匹配项的样式 TargetType在此边界处停止。因此,复制中的文本块 它是通过模板生成的,不会拾取中的样式 问题。而在模板外部定义的TextBlock则会。 解决此问题的一种方法是为 在 模板

在查找模板时,模板被视为封装边界 非控件子类型的元素的隐式样式


如果用一些文本替换绑定,您会发现问题与绑定无关。在DataTemplate中,TextBlock的默认样式似乎被忽略。找到了,虽然它是Silverlight,不是WPF。另请看。这当然有助于我理解这至少不是我的错。
    <Style TargetType="{x:Type TextBlock}">
        <Setter Property="Foreground" Value="white" />
    </Style>
    <Style TargetType="{x:Type Label}">
        <Setter Property="Foreground" Value="white" />
    </Style>
<DataTemplate x:Key="FileTransferItemTemplate">
        <StackPanel Orientation="Vertical">
            <StackPanel Orientation="Horizontal">
                <Label Content="Transferring With: " />
                <TextBlock Text="{Binding Path=OtherUserName, Mode=TwoWay}" />
            </StackPanel>
</DataTemplate>