如何从右键单击事件处理程序内部模拟WPF中的左键单击

本文关键字:单击 WPF 模拟 程序 右键 事件处理 内部 | 更新日期: 2023-09-27 18:19:32

如何从右键点击的事件处理程序内部模拟WPF中的左键点击

事实上,问题是网格单元并没有被直接正确的lcik选中。若用户先在网格单元格上左键单击,然后右键单击,那个么效果会很好。

因此,从右键单击处理程序内部,我想首先模拟左键单击。如何做到这一点。

这是右键单击事件处理程序

void OnCFLgrdrightmouseclick(object sender, MouseButtonEventArgs e)
{
  // usign the same sender and e i want to generate left click event first
  // and then remaining code should execute
}

如何从右键单击事件处理程序内部模拟WPF中的左键单击

类似的东西,但您可能必须防范无限递归。。

this.grid1 = ((System.Windows.Controls.Grid)(target));
this.grid1.MouseLeftButtonDown += new MouseButtonEventHandler(grid1_MouseLeftButtonDown);
this.grid1.MouseRightButtonDown += new MouseButtonEventHandler(grid1_MouseRightButtonDown);

void grid1_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
{
   if( leftClicked < (e.Timestamp - maxTimeBetweenClicks) )
   {
      MouseButtonEventArgs fakeLeftMouse = new MouseButtonEventArgs(e.MouseDevice, e.Timestamp, e.LeftButton);
      grid1_MouseLeftButtonDown(sender, e);
   }
   leftClicked = 0;
   throw new NotImplementedException();
}
void grid1_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
   leftClicked = e.Timestamp;
   throw new NotImplementedException();
}

你不应该这么做。这是一个设计缺陷。定义实际事件发生时要执行的操作。

您可以使用MenuItemAutomationPeer进行以下操作:

MenuItemAutomationPeer peer = new MenuItemAutomationPeer(myMenuItem);
((IInvokeProvider)peer).Invoke();

编辑:

但请记住,Bartosz Wójtowicz是对的。您不应该在生产代码中使用它,因为它不是一个好的设计。您可以在测试代码中使用它,这样您就不必为了测试目的而更改生产代码。