如何在WPF / XAML中绑定背景颜色?

我需要更改为以下代码,以便背景为红色,我尝试的两种方式都没有:

替代文字http://www.deviantsart.com/upload/1okq25l.png

XAML:

          

代码背后:

 using System.Windows; using System.ComponentModel; namespace TestBackground88238 { public partial class Window1 : Window, INotifyPropertyChanged { #region ViewModelProperty: Background private string _background; public string Background { get { return _background; } set { _background = value; OnPropertyChanged("Background"); } } #endregion #region ViewModelProperty: Message private string _message; public string Message { get { return _message; } set { _message = value; OnPropertyChanged("Message"); } } #endregion public Window1() { InitializeComponent(); DataContext = this; Background = "Red"; Message = "This is the title, the background should be " + Background + "."; } #region INotifiedProperty Block public event PropertyChangedEventHandler PropertyChanged; protected void OnPropertyChanged(string propertyName) { PropertyChangedEventHandler handler = PropertyChanged; if (handler != null) { handler(this, new PropertyChangedEventArgs(propertyName)); } } #endregion } } 

更新1:

我试过Aviad的答案似乎不起作用。 我可以使用x:Name手动执行此操作,如此处所示,但我希望能够将颜色绑定到INotifyPropertyChanged属性,我该怎么做?

替代文字http://www.deviantsart.com/upload/7tp48m.png

XAML:

       

代码背后:

 using System.Windows; using System.ComponentModel; using System.Windows.Media; namespace TestBackground88238 { public partial class Window1 : Window, INotifyPropertyChanged { #region ViewModelProperty: Background private Brush _background; public Brush Background { get { return _background; } set { _background = value; OnPropertyChanged("Background"); } } #endregion #region ViewModelProperty: Message private string _message; public string Message { get { return _message; } set { _message = value; OnPropertyChanged("Message"); } } #endregion public Window1() { InitializeComponent(); DataContext = this; Background = new SolidColorBrush(Colors.Red); Message = "This is the title, the background should be " + Background + "."; Message2.Background = new SolidColorBrush(Colors.Orange); } #region INotifiedProperty Block public event PropertyChangedEventHandler PropertyChanged; protected void OnPropertyChanged(string propertyName) { PropertyChangedEventHandler handler = PropertyChanged; if (handler != null) { handler(this, new PropertyChangedEventArgs(propertyName)); } } #endregion } } 

重要:

确保您使用的是System.Windows.Media.Brush而不是System.Drawing.Brush

它们不兼容,你会遇到绑定错误。

您需要使用的颜色枚举也不同

System.Windows.Media.Colors.Aquamarine(类名是Colors )<---使用这一个System.Drawing.Color.Aquamarine(类名是Color

如果有疑问,请使用Snoop并检查元素的background属性以查找绑定错误 – 或者只查看调试日志。

Background属性需要Brush对象,而不是字符串。 将属性的类型更改为Brush并初始化它:

 Background = new SolidColorBrush(Colors.Red); 

在这里你有一个复制粘贴代码:

 class NameToBackgroundConverter : IValueConverter { public object Convert(object value, Type targetType, object parameter, CultureInfo culture) { if(value.ToString() == "System") { return new SolidColorBrush(System.Windows.Media.Colors.Aqua); }else { return new SolidColorBrush(System.Windows.Media.Colors.Blue); } } public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) { return null; } } 

我想出来了,这只是一个命名冲突问题 :如果你使用TheBackground而不是Background,它就像在第一个例子中发布一样。 属性Background干扰了Window属性背景。

我建议阅读以下有关调试数据绑定的博文: http : //beacosta.com/blog/?p = 52

对于这个具体问题:如果查看编译器警告,您会注意到您的属性一直隐藏了Window.Background属性(或Control或属性定义的任何类)。

xaml代码:

    

c#代码:

 protected override void OnNavigatedTo(NavigationEventArgs e) { CreateNewColorBrush(); } private void CreateNewColorBrush() { SolidColorBrush my_brush = new SolidColorBrush(Color.FromArgb(255, 255, 215, 0)); Message2.Background = my_brush; } 

这个适用于Windows 8商店应用程序。 试试看。 祝好运 !

您仍然可以使用“Background”作为属性名称,只要您为窗口指定名称并在Binding的“Source”上使用此名称即可。