在keyup - WPF上触发鼠标事件

本文关键字:鼠标 事件 keyup WPF | 更新日期: 2023-09-27 17:51:01

我的问题很简单。是否有可能在WPF中分别在keyup和keydown事件上触发鼠标up和鼠标down ?

在我的自定义控件中,我有一组鼠标上下的事件处理程序。我想在用户尝试按自定义按钮上的空格键时触发相同的操作。

    private void CustomButton_MouseDown(object sender, MouseButtonEventArgs e)
    {
        eventlabel.Content = "Mousedown event Triggered";            
    }
    private void CustomButton_MouseUp(object sender, MouseButtonEventArgs e)
    {
        eventlabel.Content = "MouseUp event Triggered";
    }
    private void CustomButton_KeyDown(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.Space)
        {
            //Need to trigger all the handlers of mousedown
        }
    }
    private void CustomButton_KeyUp(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.Space)
        {
            //Need to trigger all the handlers of mouseup
        }
    }

在keyup - WPF上触发鼠标事件

你可以用RaiseEvent(EventArgs)在所有ui元素中引发事件。mousebuttonargsevensargs可以在KeyDown-EventHandler中按如下方式使用:

  MouseDevice mouseDevice = Mouse.PrimaryDevice;
  MouseButtonEventArgs mouseButtonEventArgs = new MouseButtonEventArgs(mouseDevice, 0, MouseButton.Left); 
  mouseButtonEventArgs.RoutedEvent = Mouse.MouseDownEvent;
  mouseButtonEventArgs.Source = this;
  RaiseEvent(mouseButtonEventArgs);

(从https://social.msdn.microsoft.com/Forums/vstudio/de-DE/7ec6b75b-b808-48ca-a880-fafa9025da6e/how-to-raise-a-click-event-on-an-uielement?forum=wpf修改的例子)

Tobias提到的答案对我有用。但是,它需要一些调整。

elementName.RaiseEvent(new MouseButtonEventArgs(Mouse.PrimaryDevice, 0, MouseButton.Left)
{
  RoutedEvent = Mouse.MouseDownEvent,
  Source = this,
});

这里是参考