簡體   English   中英

將SolidColorBrush綁定到Background,綁定錯誤

[英]Bind SolidColorBrush to Background, binding error

似乎在綁定一些錯誤的數據時,有人可以幫我解決我出錯的地方,盡管我無法弄明白。

不需要在這里顯示太多,這是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屬性,這很好,所以我確定它與綁定的數據類型有關。

您的代碼嘗試創建一個全新的SolidColorBrush對象,將Color1屬性值作為新SolidColorBrushColor屬性。 除了Color1屬性本身是SolidColorBrush而不是SolidColorBrush.Color屬性所需的Color

在我看來,最明顯的解決方法是直接從Color1屬性設置Background屬性:

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

如果由於某種原因你真的想要一個全新的SolidColorBrush對象,則必須使用實際的Color值進行初始化。 例如:

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

您的Color1屬性是SolidColorBrush類型,但您綁定到SolidColorBrushColor屬性,其類型為System.Windows.Media.Color

您可以將background屬性直接綁定到您正在創建的SolidColorBrush ,或者您可以更改這些屬性以顯示System.Windows.Media.Color並保持您的XAML現在。

請注意,由於您有更改這些顏色的setter,因此如果您希望在視圖中反映任何更改,則需要實現INotifyPropertyChanged

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM