2015-11-16 48 views
0

它似乎在綁定一些數據錯誤,有人可以幫助我,我哪裏出錯了,但我無法弄清楚。將SolidColorBrush綁定到背景,綁定錯誤

真的不需要在這裏顯示太多,這是Binding,我已經通過刪除背景並在其中添加顏色來測試背景。

編輯:但與綁定沒有顏色被渲染!

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

這是顏色設置類,我用的SolidColorBrush,因爲這是個什麼背景屬性需要:

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

那麼,你會得到什麼錯誤? – torvin

回答

1

您的代碼試圖創建一個全新的SolidColorBrush對象,爲新SolidColorBrush提供Color1屬性值作爲Color財產。除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> 
+0

我已經嘗試過''這也不起作用,這就是爲什麼我將SolidColorBrush對象納入問題的原因 –

+1

@Martyn:please be more具體而不是「不起作用」。將該值綁定到「SolidColorBrush」屬性是一種正確的方法,並且應該「很好」。但是當然要注意的是,如果沒有任何更改通知(例如'INotifyPropertyChanged'),刷子的_new_值將不會被傳播。從你的問題或你的評論中不清楚哪些具體不起作用。請提供[一個很好的,_minimal_,_complete_代碼示例](http://stackoverflow.com/help/mcve),它可以可靠地重現問題,並精確地解釋代碼的作用以及與您想要的不同之處。 –

+1

@MartynBall我認爲你這樣做的問題可能是因爲你從未初始化的畫筆開始,當你改變它們時你需要觸發一個'PropertyChanged'事件。 – TheInnerLight

1

Color1屬性是SolidColorBrush類型,但你要綁定到Color財產您SolidColorBrush的其類型System.Windows.Media.Color

您可以將背景屬性直接綁定到您目前正在創建的SolidColorBrush,或者您可以更改這些屬性以公開System.Windows.Media.Color,並保持現在的XAML狀態。

請注意,由於您有setter更改這些顏色,如果您想要在視圖中反映任何更改,則需要實施INotifyPropertyChanged