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

时间:2015-11-16 00:02:29

标签: c# wpf

似乎绑定了一些错误的数据,有人可以帮我解决我出错的地方,尽管我无法弄明白。

这里真的不需要显示太多,这是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属性,这很好用,所以我确定它与数据类型有关被绑定。

2 个答案:

答案 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