【问题标题】:Border Element How to add Click Event Programmaticaly边框元素如何以编程方式添加点击事件
【发布时间】:2017-12-18 22:21:08
【问题描述】:

我有一个如下所示的代码 sn-p。我正在生成新的边框元素并将其添加到父 Grid 元素。我想在单击边框元素时处理单击事件。 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");
        }

【问题讨论】:

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

标签: c# wpf


【解决方案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()

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-05-02
    • 1970-01-01
    • 2012-03-18
    • 1970-01-01
    • 1970-01-01
    • 2017-05-18
    • 1970-01-01
    相关资源
    最近更新 更多