Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/271.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何通过DevExpress以编程方式关闭所有WPF菜单、弹出窗口等,以绕过WindowsFormsHost相关问题?_C#_.net_Wpf_Devexpress_Windowsformshost - Fatal编程技术网

C# 如何通过DevExpress以编程方式关闭所有WPF菜单、弹出窗口等,以绕过WindowsFormsHost相关问题?

C# 如何通过DevExpress以编程方式关闭所有WPF菜单、弹出窗口等,以绕过WindowsFormsHost相关问题?,c#,.net,wpf,devexpress,windowsformshost,C#,.net,Wpf,Devexpress,Windowsformshost,我希望它表现得像你在应用程序上点击的某个地方。(折叠所有菜单、下拉列表等) 事实上,我正试图回避使用WindowsFormsHost在WPF应用程序中托管Windows窗体控件时遇到的与互操作性相关的焦点问题:如果DevExpress的WPF菜单/弹出窗口打开,并且您单击Windows窗体控件,则菜单/弹出窗口不会自动关闭 现在我在WindowsFormsHost中有很多Windows窗体控件,在WPF区域也有很多DevExpress控件。为了轻松解决这个问题,我添加了一个消息过滤器来钩住应用程

我希望它表现得像你在应用程序上点击的某个地方。(折叠所有菜单、下拉列表等)

事实上,我正试图回避使用
WindowsFormsHost
在WPF应用程序中托管Windows窗体控件时遇到的与互操作性相关的焦点问题:如果DevExpress的WPF菜单/弹出窗口打开,并且您单击Windows窗体控件,则菜单/弹出窗口不会自动关闭

现在我在
WindowsFormsHost
中有很多Windows窗体控件,在WPF区域也有很多DevExpress控件。为了轻松解决这个问题,我添加了一个消息过滤器来钩住应用程序中的所有单击,然后我查看单击的控件是否是Windows窗体控件。然后,我需要做一些事情,使所有的WPF菜单等由DevExpress解散,如果他们是开放的

GlobalMouseHandler globalClick = new GlobalMouseHandler();
System.Windows.Forms.Application.AddMessageFilter( globalClick );
GlobalMouseHandler:

public class GlobalMouseHandler : System.Windows.Forms.IMessageFilter
{
  private const int WM_LBUTTONDOWN = 0x201;
  private const int WM_RBUTTONDOWN = 0x204;

  public bool PreFilterMessage( ref System.Windows.Forms.Message m )
  {
    if( m.Msg == WM_LBUTTONDOWN || m.Msg == WM_RBUTTONDOWN )
    {
      var c = System.Windows.Forms.Control.FromHandle( m.HWnd );

      if( c != null )
        // TODO: CLOSE ALL WPF MENUS ETC
        // Didn't work: MainWindow.Instance.ARandomControl.Focus();
    }

    return false;
  }
}

您是否尝试循环浏览控件并引发失焦事件?

我根据您的问题制作了一个原型,一切正常(当我单击Windows窗体内的主机时,外部WPF combox崩溃,反之亦然)

因此,我们知道本机控件按预期工作,问题可能是因为您使用的UI框架。

所以我不得不:

MainWindow.Instance.BarManager.CloseAllPopups();

我试图通过调用其他控件的focus方法将焦点设置为其他控件,但没有成功。请展示您所做的尝试。更清楚地解释你的问题。你能展示一些代码来说明问题吗?例如一个简化的wpf窗口显示问题?我刚刚意识到问题只存在于我到处使用的第三方wpf控件上:幸运的是,他们有一个静态方法来关闭所有弹出窗口。多么浪费+200个代表:)你仍然应该写下解决方案作为答案,至少如果你可以这样做,让那些控件有相同问题的其他人可能会发现它。你不能拿回赏金,但是如果人们觉得你的答案有用的话,他们仍然可以投票支持你。谢谢老兄!你帮我节省了很多时间!