C# 从WinForms打开WPF窗口时的奇怪行为
从Excel加载项显示WPF窗口时,每当我使用C# 从WinForms打开WPF窗口时的奇怪行为,c#,wpf,excel,winforms,office-interop,C#,Wpf,Excel,Winforms,Office Interop,从Excel加载项显示WPF窗口时,每当我使用myWindow.show()而不是myWindow.ShowDialog()显示WPF窗口时,我都会遇到奇怪的行为。到目前为止,当使用后者时,一切都很好。但是,如果能够显示一个窗口,这样用户就可以同时与Excel交互,这将是一件好事,也就是说,我希望从Show()中看到这种行为 问题是,我表单中的控件开始非常奇怪地快速运行组合框下拉列表会立即折叠,文本框输入会出现在Excel工作表中处于活动状态的选定单元格中 我注意到,使用ShowDialog,S
myWindow.show()
而不是myWindow.ShowDialog()
显示WPF窗口时,我都会遇到奇怪的行为。到目前为止,当使用后者时,一切都很好。但是,如果能够显示一个窗口,这样用户就可以同时与Excel交互,这将是一件好事,也就是说,我希望从Show()
中看到这种行为
问题是,我表单中的控件开始非常奇怪地快速运行<代码>组合框下拉列表会立即折叠,文本框输入会出现在Excel工作表中处于活动状态的选定单元格中
我注意到,使用ShowDialog
,Snoop也可以附加到我的窗口,而使用Show,我得到的错误相当于“找不到要附加的PresentationSource”。然而,我不完全确定这是否有关系
显然,一种解决方案是停止从WinForms直接显示WPF窗口;如果我将窗口更改为UserControl并将其放入ElementHost
,我希望问题会基本消失。然而,如果可以的话,我宁愿避免这样做
当前代码(大致)
目前的想法是:
- 我正在从Excel接收转发到
的窗口消息,其中一些消息是它不希望看到的myWindow
- Excel正在截取针对我的窗口(键盘和鼠标)的消息,这可能就是
想要解决的问题(但要么我用错了,要么不是整个解决方案)ElementHost.EnableModelsKeyboardInterop(myWindow)
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();
}