如何从右键点击的事件处理程序内部模拟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
}
类似的东西,但您可能必须防范无限递归。。
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是对的。您不应该在生产代码中使用它,因为它不是一个好的设计。您可以在测试代码中使用它,这样您就不必为了测试目的而更改生产代码。