WPF矩形颜色绑定

我正在尝试编写矩形网格,它确实会改变其对象的颜色。

private void Window_Loaded(object sender, RoutedEventArgs e) { for (int i = 0; i < size; i++) { main_grid.ColumnDefinitions.Add(new ColumnDefinition()); main_grid.RowDefinitions.Add(new RowDefinition()); } for (int i = 0; i < size; i++) { for (int j = 0; j < size; j++) { cells[i, j] = new Cell { state = false, col = false }; Rectangle rect = new Rectangle(); Grid.SetColumn(rect, j); Grid.SetRow(rect, i); rect.Fill = Brushes.Orange; rect.DataContext = cells[i, j]; rect.SetBinding(OpacityProperty, "ev_opacity"); Binding binding = new Binding("ev_col"); binding.Converter = new BooleanToBrushConverter(); rect.SetBinding(Rectangle.FillProperty, binding); main_grid.Children.Add(rect); } } setupTimer(); } 

如何设置与col相关的矩形颜色? (fe:true – 黑色,假 – 白色)

细胞类:

 class Cell : INotifyPropertyChanged { private bool _state; private bool _Col; public event PropertyChangedEventHandler PropertyChanged; public event PropertyChangedEventHandler PropertyChanged2; public bool Col; //to set color { get { return _Col; } set { _Col = value; if (PropertyChanged2 != null) { PropertyChanged2(this, new PropertyChangedEventArgs("event2")); }; } } public bool state //to set opacity { get { return _state; } set { _state = value; if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs("ev_opacity")); }; } } public static implicit operator int(Komorka c) { return Convert.ToInt32(c.state); } } 

编辑:此代码不起作用 – 运行后如果我点击网格没有任何反应。

一种常见的方法是在绑定上使用ValueConverter 。

只需创建一个将布尔值转换为Brush的ValueConverter。

在WPF中,如果您有CellControl,也可以在Cell的模板中使用DataTrigger 。

编辑

要在代码中添加绑定:

  Binding binding = new Binding("State"); binding.Converter = new BooleanToBrushConverter(); _rectangle.SetBinding(Rectangle.FillProperty, binding); 

绑定:

 my_rect.SetBinding(Rectangle.OpacityProperty, "state_opacity"); my_rect.SetBinding(Rectangle.FillProperty, new Binding() { Converter = new BooleanToBrushConverter(), Path = new PropertyPath("state_color") } ); 

细胞类。 更改矩形的颜色取决于“state_color”变量。

 class Komorka : INotifyPropertyChanged { private bool _state_opacity; private bool _state_color; public event PropertyChangedEventHandler PropertyChanged; public bool state_color { get { return _state_color; } set { _state_color = value; if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs("state_color")); }; } } public bool state_opacity { get { return _state_opacity; } set { _state_opacity = value; if (PropertyChanged != null) { PropertyChanged(this, new PropertyChangedEventArgs("state_opacity")); }; } } } } 

转换器类:

 class BoolToBrush : IValueConverter { public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) { if (value != null) { if ((bool)value == false) { return new SolidColorBrush(Colors.Orange); } else { return new SolidColorBrush(Colors.Black); } } else { return new SolidColorBrush(Colors.Red); } }