似乎绑定了一些错误的数据,有人可以帮我解决我出错的地方,尽管我无法弄明白。
这里真的不需要显示太多,这是Binding
,我已经通过删除背景测试了背景,只是在那里放了一种颜色,这是有效的。
编辑但是绑定时没有渲染颜色!
<Setter Property="Background">
<Setter.Value>
<SolidColorBrush Color="{Binding Color1}" />
</Setter.Value>
</Setter>
这是设置颜色的类,我使用SolidColorBrush,因为这是Background属性所期望的:
public class notificationObject : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string name)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(name));
}
}
private string _icon;
private string _message;
private string _detail;
private SolidColorBrush _color1;
private SolidColorBrush _color2;
public string Icon
{ get { return _icon; } set { _icon = value; OnPropertyChanged("Icon"); }}
public string Message
{ get { return _message; } set { _message = value; OnPropertyChanged("Message"); } }
public string Detail
{ get { return _detail; } set { _detail = value; OnPropertyChanged("Detail"); } }
public SolidColorBrush Color1
{ get { return _color1; } set { _color1 = value; OnPropertyChanged("Color1"); } }
public SolidColorBrush Color2
{ get { return _color2; } set { _color2 = value; OnPropertyChanged("Color2"); } }
public notificationObject newNotification(int type, string message, string detail)
{
//Create new instance of object
notificationObject x = new notificationObject();
switch (type)
{
case 1:
//Fatal
x.Icon = "";
x.Message = message;
x.Detail = detail;
x.Color1 = new SolidColorBrush(Color.FromArgb(0, 170, 60, 18));
x.Color2 = new SolidColorBrush(Color.FromArgb(0, 238, 78, 16));
return x;
case 2:
//Fatal
x.Icon = "";
x.Message = message;
x.Detail = detail;
x.Color1 = new SolidColorBrush(Color.FromArgb(0, 170, 60, 18));
x.Color2 = new SolidColorBrush(Color.FromArgb(0, 238, 78, 16));
return x;
case 3:
//Unauthorized
x.Icon = "";
x.Message = message;
x.Detail = detail;
x.Color1 = new SolidColorBrush(Color.FromArgb(0, 170, 60, 18));
x.Color2 = new SolidColorBrush(Color.FromArgb(0, 238, 78, 16));
return x;
case 4:
//Warning
x.Icon = "";
x.Message = message;
x.Detail = detail;
x.Color1 = new SolidColorBrush(Color.FromArgb(0, 241, 176, 24));
x.Color2 = new SolidColorBrush(Color.FromArgb(0, 205, 152, 28));
return x;
case 5:
//Warning
x.Icon = "";
x.Message = message;
x.Detail = detail;
x.Color1 = new SolidColorBrush(Color.FromArgb(0, 41, 161, 213));
x.Color2 = new SolidColorBrush(Color.FromArgb(0, 36, 142, 184));
return x;
}
//Can't find error code
x.Icon = "";
x.Message = "Unable to find requested error code!";
x.Detail = "";
x.Color1 = new SolidColorBrush(Color.FromArgb(0, 170, 60, 18));
x.Color2 = new SolidColorBrush(Color.FromArgb(0, 238, 78, 16));
return x;
}
}
显然我将我的DataContext设置为此类的实例,我有其他绑定,我绑定到Message
属性,这很好用,所以我确定它与数据类型有关被绑定。
答案 0 :(得分:1)
您的Color1
媒体资源属于SolidColorBrush
,但您绑定的是Color
SolidColorBrush
媒体资源System.Windows.Media.Color
的{{1}}属性。
您可以将背景属性直接绑定到您当前正在创建的SolidColorBrush
,或者您可以更改这些属性以显示System.Windows.Media.Color
,并保持您的XAML现在。
请注意,由于您有更改这些颜色的设置器,因此如果您希望在视图中反映任何更改,则需要实现INotifyPropertyChanged
。
答案 1 :(得分:1)
您的代码尝试创建一个全新的SolidColorBrush
对象,将Color1
属性值作为新Color
的{{1}}属性。除了SolidColorBrush
属性本身是Color1
而不是SolidColorBrush
属性所需的Color
。
在我看来,最明显的解决方法是直接从SolidColorBrush.Color
属性设置Background
属性:
Color1
如果由于某种原因你真的想要一个全新的<Setter Property="Background" Value="{Binding Color1}"/>
对象,则必须使用实际的SolidColorBrush
值进行初始化。例如:
Color