2011-04-01 5 views
1

사각형의 그리드를 쓰려고하는데, 오브젝트의 색상을 변경합니다.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과 관련하여 사각형의 색을 설정하는 방법은 무엇입니까? (f.e : 참 - 거짓, 검은 색 - 흰색)

셀 클래스 :

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

편집 : 가 작동하지 않습니다이 코드 - 내가 그리드를 클릭하면 실행 아무것도 후 일.

답변

0

바인딩 :

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

이 답변에서 클릭 이벤트를 어떻게 해결했는지는 분명하지 않습니다. –

3

일반적인 방법은 바인딩에 ValueConverter을 사용하는 것입니다.

부울을 브러시로 변환하는 ValueConverter를 만듭니다.

CellControl이있는 경우 WPF에서는 DataTrigger을 Cell 템플릿에도 사용할 수 있습니다.

편집

코드에서 바인딩을 추가하려면 :

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

OK, I는 볼 수 있지만 내가 사각형 및 CS 코드 내 부울 바인딩 할 수 있습니다 내가 어떻게 변환이 arledy 경우? 나는 xaml 파일에 사각형이 없기 때문에 이렇게 할 수 없다. – mkd

+0

답변을 업데이트했습니다. –

+0

내 질문이 업데이트되었습니다. – mkd