单击另一个按钮时更改按钮的背景

时间:2018-04-09 19:06:54

标签: c# wpf

我目前正在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);
    }

1 个答案:

答案 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;
    }

通常,您将模板数据转换为重复控件,而不是将它们添加到代码中,顺便说一句。