我正在设计一个内置256个按钮的应用程序,我使用for循环将它们添加到C#代码的WrapPanel中。 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);
}
答案 0 :(得分:1)
如果你要做的是将按钮的背景颜色绑定到你的&#34; MyData&#34;类对象,你几乎就在那里......
首先,创建绑定对象,将源设置为&#34; mydata&#34;的新实例,然后指向&#34; Color&#34;的路径。财产暴露。
然后,您需要将新的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;
}