当从Excel插件显示WPF窗口时,每当我使用myWindow.Show()
而不是myWindow.ShowDialog()
显示时,我都会遇到奇怪的行为。到目前为止,使用后者时一切都运行良好。但是,能够显示一个窗口以便用户可以同时与Excel交互(即我期望从Show()
开始的行为,这将是很好的。
问题在于,我的表单中的控件很快就开始表现得非常奇怪。 ComboBox
下拉列表会立即崩溃,文本框输入会在Excel工作表中处于活动状态的任何单元格中结束。
我注意到使用ShowDialog
,Snoop也可以附加到我的窗口,而使用Show,我得到的错误相当于“无法找到要附加的PresentationSource”。但是,我并不完全确定这是否相关。
显然,一种解决方案是停止直接从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();
}
目前的想法是:
myWindow
,其中一些是不期望的。ElementHost.EnableModelessKeyboardInterop(myWindow)
旨在解决的问题(但是我使用的是错误的,或者它不是整个解决方案)。