繁体   English   中英

向动态添加的控件添加基本事件

[英]Adding basic events to dynamically added controls

我有一些基本代码,当将控件放置在Canvas上时,我需要用户能够通过简单的按键操作删除该控件。

private void PlaceElementOnCavas(UIElement element, Point point) {

    Canvas.SetLeft(element, point.X);
    Canvas.SetTop(element, point.Y);

    // Add the event to allow the user to press delete and remove the control
    element.KeyDown += (sender, e) => {
        if (e.Key == Key.Delete) {
            this.designCanvas.Children.Remove(element);
        }
    };

    this.designCanvas.Children.Add(element);

}

我的代码看起来像这样。 我的控件添加得很好,恰好在我需要它的画布上。

无论我是尝试通过lambda还是通过对另一种方法的传统调用来添加事件处理程序,该事件处理程序都不会执行任何操作。

我想念什么?

以下步骤应足以使您的键盘输入正常工作:

  • 设置Focusable="True"
  • 处理MouseLeftButtonUp并分配Keyboard.Focus
  • 设置Background以捕获鼠标事件
  • 处理关键事件

然后单击进入元素以使其聚焦并使用键。 或者,如果您不打算使用鼠标,而只想通过按tab来聚焦鼠标,则只需要Focusable和按键事件即可。

<Grid x:Name="grid1" KeyDown="grid1_KeyDown" Focusable="True" MouseLeftButtonUp="grid1_MouseLeftButtonUp" Background="Transparent">
</Grid>

焦点处理:

private void grid1_KeyDown(object sender, KeyEventArgs e)
{
    // whatever you plan to do
}

private void grid1_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
    Keyboard.Focus(sender as IInputElement);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM