C# 边框元素如何添加单击事件程序
我有一个如下的代码片段。我正在生成新的边界元素并将其添加到父网格元素中。我想在单击边框元素时处理单击事件。br.addHandler命令不起作用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() {
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
。您还可以使用+=
分配事件处理程序。