边框元素如何添加Click Event Programmaticaly

时间:2017-12-18 22:21:08

标签: c# wpf

我有一个如下代码片段。我正在生成新的边框元素并将其添加到父Grid元素。我想在点击border元素时处理click事件。 br.addHandler命令不起作用。

for (var h = 0; h < heightInt; h++)
        {
            for (var w = 0; w < widthInt; w++)
            {
                Border br = new Border()
                {
                    BorderThickness = new Thickness(1),
                    BorderBrush = Brushes.Black
                };

                br.SetValue(Grid.ColumnProperty, w);
                br.SetValue(Grid.RowProperty, h);
                br.AddHandler(Button.ClickEvent, new RoutedEventHandler(borders_Click),true);

                EditorGr.Children.Add(br);
            }
        }
        private void borders_Click(object sender, RoutedEventArgs e)
        {
            MessageBox.Show("asdf");
        }

1 个答案:

答案 0 :(得分:1)

我相信您的问题与您尝试添加的事件处理程序有关。您正尝试将Button.ClickEvent的处理程序添加到没有此事件的Border。您可以使用LeftMouseDownEvent,这将有效。

br.AddHandler(Border.MouseLeftButtonDownEvent, new RoutedEventHandler(borders_Click), true);

或者,从this SO回答关于双击边框,您可以添加鼠标输入绑定。

private class MyMouseCommand : ICommand
{
    public event EventHandler CanExecuteChanged;
    Action<object> _execute;
    public MyMouseCommand(Action<object> execute)
    {
        _execute = execute;
    }
    public bool CanExecute(object parameter)
    {
        return true;
    }

    public void Execute(object parameter)
    {
        _execute?.Invoke(parameter);
    }
}

然后你可以像这样使用它:

var mouse = new MouseBinding(
    new MyMouseCommand((r) => borders_Click()), new MouseGesture(MouseAction.LeftClick));
br.InputBindings.Add(mouse);

最后 - 更新您的点击方法签名(因为它不再是路由事件,您不需要任何参数):

private void borders_Click()