C# 将SolidColorBrush绑定到背景,绑定错误

C# 将SolidColorBrush绑定到背景,绑定错误,c#,wpf,C#,Wpf,似乎在绑定一些错误的数据时,有人能帮我找出哪里出了问题,尽管我无法找出它 这里真的不需要显示太多,这是绑定,我已经通过移除背景并在其中添加颜色来测试背景,效果很好 编辑:但使用绑定时不会渲染颜色 <Setter Property="Background"> <Setter.Value> <SolidColorBrush Color="{Binding Color1}" />

似乎在绑定一些错误的数据时,有人能帮我找出哪里出了问题,尽管我无法找出它

这里真的不需要显示太多,这是
绑定
,我已经通过移除背景并在其中添加颜色来测试背景,效果很好

编辑:但使用绑定时不会渲染颜色

<Setter Property="Background">
                <Setter.Value>
                    <SolidColorBrush Color="{Binding Color1}" />
                </Setter.Value>
            </Setter>

显然,我将我的DataContext设置为这个类的实例,我还有其他绑定,在这里我绑定到
Message
属性,这很好,所以我确信这与被绑定的数据类型有关

您的
Color1
属性的类型为
SolidColorBrush
,但您绑定到
SolidColorBrush
属性的
Color
,该属性的类型为
System.Windows.Media.Color

您可以将后台属性直接绑定到当前正在创建的
SolidColorBrush
,也可以更改这些属性以公开
System.Windows.Media.Color
,并保持XAML的现状


请注意,由于您有设置器来更改这些颜色,因此如果希望在视图中反映任何更改,则需要实现
INotifyPropertyChanged

您的代码尝试创建一个全新的
SolidColorBrush
对象,提供
Color1
属性值作为新
SolidColorBrush
Color
属性。除了
Color1
属性本身是
SolidColorBrush
而不是
SolidColorBrush.Color
属性所需的
Color

在我看来,最明显的解决办法是直接从
Color1
属性设置
Background
属性:

<Setter Property="Background" Value="{Binding Color1}"/>

那么,您会遇到什么错误?我尝试了
,但这也不起作用,这就是为什么我制作了SolidColorBrush对象,以防issue@Martyn:请比“不起作用”更具体。将值绑定到
SolidColorBrush
属性是一种正确的方法,应该可以“正常”工作。但当然要注意,如果没有一些更改通知(例如,
INotifyPropertyChanged
),笔刷的新值将不会传播。从你的问题或评论中不清楚什么具体不起作用。请提供可靠的重现问题的方法,并精确解释代码的作用以及与您想要的不同之处。@MartynBall我认为这样做的问题可能是因为您从未初始化的笔刷开始,当您更改属性时,您需要触发一个
PropertyChanged
事件。当我说它不起作用时,我的意思是没有渲染颜色,抱歉,我以为这是给定的。如果这应该工作,那么它必须是一个问题,添加颜色在课堂上。我不明白的是,由于其他属性工作正常,因此它不可能是一个
INotifyPropertyChanged
问题,例如
Message
@Martyn:当正确绑定(即
solidcolorbush
源到
solidcolorbush
目标)时,即使没有更改通知,我也希望看到一些颜色,因为对象以构造函数中的一些笔刷对象值开始。同样,如果没有一个好的答案,就不可能完全理解这个问题,更不用说完整的答案了。我将指出,实际上,您在这里所做的这类事情似乎更适合使用XAML
样式
,通过
触发器
来实现,这些触发器对应于现在传递到构造函数中的各种值。
<Setter Property="Background" Value="{Binding Color1}"/>
<Setter Property="Background">
            <Setter.Value>
                <SolidColorBrush Color="{Binding Color1.Color}" />
            </Setter.Value>
        </Setter>