2016-05-15 115 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