3

我创建了一个 Microsoft Word 2010 vsto 插件,当用户单击功能区按钮时,它会显示许多自定义 Wpf 窗口对话框。

我遇到的问题是,如果您单击任务栏中的 Word 图标,自定义对话框会在 Word 实例后面消失。

经过一番谷歌搜索后,似乎可以通过设置我的窗口的 Owner 属性来解决这个问题,但我正在努力获取 Word 应用程序的 Window 实例。

我在下面附上了相关代码,有什么建议吗?

using WordNS = Microsoft.Office.Interop.Word;

Window wrapperWindow = new Window();
wrapperWindow.ResizeMode = ResizeMode.NoResize;
wrapperWindow.WindowStartupLocation = System.Windows.WindowStartupLocation.CenterScreen;
wrapperWindow.ShowInTaskbar = false;
wrapperWindow.Content = dialogViewModel.View;
wrapperWindow.Title = dialogViewModel.Title;
wrapperWindow.SizeToContent = SizeToContent.WidthAndHeight;

WordNS.Application app = (WordNS.Application)Marshal.GetActiveObject("Word.Application");
wrapperWindow.Owner = (Window)app.ActiveWindow;

将 ActiveWindow 转换为 Window 时出现无效的转换异常

4

2 回答 2

2

例外清楚地表明您的问题的答案是否定的。

如果Microsoft.Office.Interop.Word提供了任何方法来获取 Word 主窗口的窗口句柄 (HWND)(或者如果您通过一些 Win32 调用获取该句柄),您可能会尝试通过WindowInteropHelper.Owner属性设置窗口的所有者。

于 2012-08-08T10:53:50.823 回答
2

使用 Clemens 的建议走这WindowInteropHelper条路线,下面是完成此工作的完整代码:

1)在类中的任何位置定义此指针:

[DllImport("user32.dll")]
private static extern IntPtr GetForegroundWindow();

2)在窗口声明代码中添加如下代码:

        Window wrapperWindow = new Window();
        //Set all the relevant window properties

        //Set the owner of the window to the Word application
        IntPtr wordWindow = GetForegroundWindow();
        WindowInteropHelper wih = new WindowInteropHelper(wrapperWindow);
        wih.Owner = wordWindow;
于 2012-08-10T06:14:08.693 回答