我目前正在WPF中进行实验,只是创建了一个带有800个按钮的UniformGrid,它们是在for循环中创建的。所有按钮都有自己的名称并共享相同的单击事件。 我现在想做的是:我想点击第一个按钮(rect0)来改变这个按钮和下一个按钮(rect1)的颜色。 我现在完全陷入困境,因为我写入点击事件的所有内容都是指我点击的按钮。
public MainWindow()
{
InitializeComponent();
for (int i = 0; i < 800; i++)
{
Button BTN_rect = new Button()
{
Name = "rect" + i,
Background = Brushes.White,
};
BTN_rect.Click += BTN_rect_Click;
Uniform.Children.Add(BTN_rect);
}
}
private void BTN_rect_Click(object sender, RoutedEventArgs e)
{
Button BTN_rect = sender as Button;
BTN_rect.Background = Brushes.Red;
MessageBox.Show(BTN_rect.Name);
}
答案 0 :(得分:-1)
有很多方法可以做到这一点。 我拿了一个快捷方式,只在堆叠面板上放了9个按钮,否则相同。
public MainWindow()
{
InitializeComponent();
for (int i = 0; i < 8; i++)
{
Button BTN_rect = new Button()
{
Name = "rect" + i,
Content =Name,
Tag = i,
Background = Brushes.White,
};
BTN_rect.Click += BTN_rect_Click;
sp.Children.Add(BTN_rect);
}
}
private void BTN_rect_Click(object sender, RoutedEventArgs e)
{
Button current = sender as Button;
current.Background = Brushes.Red;
string targetName = $"rect{((int)current.Tag) + 1}";
Button nextButton = sp.Children.OfType<Button>().Where(x => x.Name == targetName).SingleOrDefault();
nextButton.Background = Brushes.Red;
}
通常,您将模板数据转换为重复控件,而不是将它们添加到代码中,顺便说一句。