Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 边框元素如何添加单击事件程序_C#_Wpf - Fatal编程技术网

C# 边框元素如何添加单击事件程序

C# 边框元素如何添加单击事件程序,c#,wpf,C#,Wpf,我有一个如下的代码片段。我正在生成新的边界元素并将其添加到父网格元素中。我想在单击边框元素时处理单击事件。br.addHandler命令不起作用 for (var h = 0; h < heightInt; h++) { for (var w = 0; w < widthInt; w++) { Border br = new Border() {

我有一个如下的代码片段。我正在生成新的边界元素并将其添加到父网格元素中。我想在单击边框元素时处理单击事件。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");
        }
for(var h=0;h
我相信您的问题与您试图添加的事件处理程序有关。您正在尝试为
按钮添加处理程序。单击事件
到没有此事件的
边框
。您可以使用
LeftMouseDownEvent
,这样就可以了

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");
        }
br.AddHandler(Border.MouseLeftButtonDownEvent, new RoutedEventHandler(borders_Click), true);
或者,根据双击边框的答案,您可以添加鼠标输入绑定

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");
        }
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);
    }
}
最后-更新click方法签名(因为它不再是路由事件,所以不需要任何参数):

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");
        }

使用
br.MouseDown
MouseUp
甚至
MouseLeftButtonDown
。您还可以使用
+=
分配事件处理程序。