我正在设计一个内部带有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);
}
如果您要执行的操作是将按钮的背景色绑定到“ 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;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句