2016-05-15 121 views
0

我正在設計一個內部有256個按鈕的應用程序,並且我正在使用for循環將它們添加到C#代碼中的WrapPanel中。這些按鈕在XAML代碼中未提及。 我的問題是,當點擊其中一個,我必須改變它的顏色使用綁定。 我嘗試下面的代碼,但它不工作(只是改變了按鈕的內容):無XAML綁定[WPF]

 private void NewButton_Click(object sender, RoutedEventArgs e) 
    { 
     Button btn = (Button)sender; 

     for (int i = 0; i < counter; i++) 
     { 
      if (btn.Name == ("Butt" + i)) 
      { 
       btn.Content = "works"; 
       MyData mydata = new MyData(); 
       Binding binding = new Binding("Color"); 
       binding.Source = mydata; 
       binding.Source = btn; 
       break; 
      } 
     } 
    } 

 private int counter = 0; 
    public class MyData 
    { 
     public static Brush _Color = Brushes.Red; 
     public Brush Color 
     { 
      get 
      { 
       return _Color; 
      } 
     } 
    } 
    public MainWindow() 
    { 

     InitializeComponent(); 

     int num = number(3); 
     List<Button> btnList = new List<Button>(); 
     for(int i =0; i<(num*num); i++) 
     { 

      Button button = new Button(); 

      button.Name = "Butt" + counter; 

      button.Content = "New"; 

      counter++; 
      button.Height = 35; 
      button.Width = 35; 
      button.Click += new RoutedEventHandler(NewButton_Click); 
      wp.Children.Add(button); 

     } 

回答

1

如果你正在嘗試做什麼按鈕的背景顏色結合你的「MyData」類對象,你幾乎在那裏...

首先,創建綁定對象,將源代碼設置爲新的「mydata」實例,然後顯示「Color」屬性的路徑。

那麼,您需要將新的BINDING對象保存到您的按鈕控件中,並告訴它您希望將BackgroundProperty綁定到新創建的綁定。以下對代碼的小調整起作用。不完全是爲什麼你的方法是爲你的整體項目,但希望做你的意圖。

  if (btn.Name == ("Butt" + i)) 
      { 
       btn.Content = "works"; 
       MyData mydata = new MyData(); 
       var oBind = new Binding 
       { 
        // bind its source to this view model instance 
        Source = mydata, 
        // what property on THE BUTTON do want to be bound to. 
        Path = new PropertyPath("Color") 
       }; 

       btn.SetBinding(BackgroundProperty, oBind); 
       btn.DataContext = oBind; 
       break; 
      } 
+0

謝謝,它的工作原理! – hegendroffer