如何在右键单击
的事件处理程序中模拟左键单击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
}
答案 0 :(得分:1)
有点像,但你可能需要保护无限递归..
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();
}
答案 1 :(得分:0)
你不应该这样做。这是一个设计缺陷。定义要在实际事件发生时执行的操作。
答案 2 :(得分:0)
您可以使用MenuItemAutomationPeer:
MenuItemAutomationPeer peer = new MenuItemAutomationPeer(myMenuItem);
((IInvokeProvider)peer).Invoke();
修改强>
但请记住,BartoszWójtowicz是对的。您不应该在生产代码中使用它,因为它不是一个好的设计。您可以在测试代码中使用它,因此您不必为了测试目的而更改生产代码。