WPF使用动态创建的上下文菜单项更新动态创建的按钮

时间:2016-05-11 21:30:25

标签: c# wpf data-binding controls

我是WPF的新手,我正在努力追随这件事:

我正在创建动态按钮并将它们添加到网格中,然后我想给它们我正在做的上下文菜单,但是这里的事情contextmenu由整数组成,现在当我从contextmenu单击整数时,我想更新按钮从这个上下文中选择的数字内容如何实现它?

非常感谢帮助和解释。

这是我的代码:

     List<int> a = new List<int>();
        for (int i = 0; i < boardSize; i++)
            a.Add(i + 1);

        ContextMenu menu = new ContextMenu();
        menu.ItemsSource = a;

        for (int i = 0; i < boardSize; i++)
        {

            for (int j = 0; j < boardSize; j++)
            {

                btn = new Button() {ContextMenu=menu };
                btn.Width = 25;
                btn.Height = 25;
                btn.VerticalAlignment = VerticalAlignment.Center;
                btn.SetValue(Grid.ColumnProperty, j);
                btn.SetValue(Grid.RowProperty, i);
                btn.HorizontalAlignment = HorizontalAlignment.Stretch;
                btn.Background = new SolidColorBrush(Colors.Blue);
                MyGrid.Children.Add(btn);

            }
        }

1 个答案:

答案 0 :(得分:0)

你需要做4个步骤来实现它:

  1. 添加成员变量以记录右键单击要显示的按钮 文本菜单:

    private Button currentBtn;

  2. 添加事件以记录当前的右键单击按钮:

    btn.MouseRightButtonUp += (cbtn, e2) => { currentBtn = cbtn as Button; };

  3. 定义menuitem:

    List<MenuItem> a = new List<MenuItem>(); for (int i = 0; i < boardSize; i++) { var item = new MenuItem(); item.Header = (i + 1).ToString(); item.Click += item_Click; a.Add(item); }

  4. 将click事件添加到menuitem:

    void item_Click(object sender, RoutedEventArgs e) { if (currentBtn != null) { var i = sender as MenuItem; Dispatcher.Invoke(() => { currentBtn.Content = i.Header; }); } }