我有一个如下代码片段。我正在生成新的边框元素并将其添加到父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");
}
答案 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()