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>