WPF矩形颜色绑定

WPF矩形颜色绑定

问题描述:

我试图写矩形的网格,它确实会改变其对象的颜色。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(); 
    } 

如何根据列设置矩形的颜色? (f.e:真 - 黑,假 - 白)

Cell类:

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); 
     } 
    } 

编辑: 此代码不能正常工作 - 后运行什么,如果我对电网点击发生。

绑定:

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

Cell类。改变矩形的颜色取决于“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")); 
       }; 
      } 
     } 
    } 
} 

Converter类:

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); 
      } 
     } 
+0

在这个答案中不太清楚你是如何解决点击事件的。 – 2011-04-03 12:32:03

常用的方法是在绑定上使用ValueConverter

只需制作一个将布尔转换为Brush的ValueConverter即可。

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

EDIT

要添加代码的结合:

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

行,我明白,但我怎么能结合矩形和我在CS代码BOOL如果我arledy有转换器?我没有在xaml文件中的矩形,所以我不能这样做。 – mkd 2011-04-01 14:40:42

+0

我更新了我的答案。 – 2011-04-01 15:27:55

+0

我更新了我的问题。 – mkd 2011-04-01 16:23:51