2016-05-15 2 views
0

Я разрабатываю приложение с 256 кнопками внутри, и я добавляю их в WrapPanel в коде C#, используя для цикла. Эти кнопки не упоминаются в коде 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», а затем путь к вашему свойству «Цвет».

Затем, вам нужно сохранить новый объект 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

Смежные вопросы