当从WinForms打开一个WPF窗口奇怪的行为

当从Excel插件显示一个WPF窗口时,我遇到奇怪的行为,每当我用myWindow.Show()而不是myWindow.ShowDialog()显示它。 到目前为止,在使用后者时一切都很好。 但是,能够显示一个窗口,这样用户就可以同时与Excel进行交互 – 也就是我期望从Show()获得的行为。

问题在于,我的表单中的控件开始非常快地performance得非常奇怪。 ComboBox下拉列表立即折叠,并且文本框input最终在Excel工作表中选中的任何单元格处于活动状态。

我注意到,使用ShowDialog ,Snoop能够附加到我的窗口,而使用Show,我得到一个错误,等于“找不到要附加的PresentationSource”。 但是,我不是完全确定这是否相关。

显然,一个解决scheme是停止从WinForms直接显示WPF窗口; 我期望这个问题很大程度上消失,如果我改变我的窗口到一个UserControl,并把它放入一个ElementHost 。 不过,如果可以,我宁愿避免。

目前的代码(大致)

 public void DoOpenWindow(Office.IRibbonControl button) { var myWindow = new myWindow(); // This hasn't addressed the issue, though may be sensible to include: //ElementHost.EnableModelessKeyboardInterop(myWindow); // This *also* didn't work, and essentially set my window to // be always on top of Excel //var hwSrc = HwndSource.FromVisual(myWindow ); //var ownerHelper = new WindowInteropHelper(myWindow ); //ownerHelper.Owner = (IntPtr)Globals.ThisAddIn.Application.Hwnd; // with ShowDialog() this works fine... myWindow .Show(); } 

目前的想法是:

  • 我得到从Excel窗口消息转发到myWindow ,其中一些不期望的。
  • Excel正在拦截用于我的窗口(键盘和鼠标)的消息,这可能ElementHost.EnableModelessKeyboardInterop(myWindow)打算解决的问题(但是我错误地使用了它,或者它不是整个解决scheme)。