首页 文章

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

提问于
浏览
0

如何在右键单击事件处理程序内部模拟左键单击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

}

3 回答

  • 0

    有点像,但你可能需要保护无限递归..

    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

    您可以使用MenuItemAutomationPeer

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

    EDIT:

    但请记住,BartoszWójtowicz是对的 . 您不应该在 生产环境 代码中使用它,因为它不是一个好的设计 . 您可以在测试代码中使用它,因此您不必为了测试目的而更改 生产环境 代码 .

相关问题