2016-05-15 3 views
0

内部に256個のボタンがあるアプリケーションを設計していますが、forループを使用してC#コードのWrapPanelに追加しています。これらのボタンは、XAMLコードでは説明されていません。 私の問題は、それらのいずれかをクリックすると、バインディングを使用して色を変更する必要があるということです。 (ボタンのみの内容を変更する)私は、次のコードを試してみましたが、それは動作しません:XAMLを使用しないバインディング

 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"プロパティのパスを公開します。

THENの場合、新しい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

関連する問題