2012-08-08 134 views
2

我创建了一个Microsoft Word 2010 vsto加载项,当用户单击功能区按钮时,它会显示一些自定义的Wpf窗口对话框。可能将激活的Microsoft Word窗口强制转换为WPF窗口?

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

经过一些谷歌搜索后,它似乎可以通过设置我的窗口的所有者属性来解决,但我努力获得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; 

Invalid cast exception when casting ActiveWindow to Window

回答

1

二手克莱门斯的建议,去与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; 
+0

我相信我已经试过这个,虽然它的作品,活动窗口不一定是Word窗口。 – Chris 2016-06-16 20:20:55

1

异常明确指出,回答你的问题是

如果Microsoft.Office.Interop.Word提供任何手段来获得Word的主窗口的窗口句柄(HWND)(或者,如果你通过一些Win32调用来获得该句柄),则可以尝试通过WindowInteropHelper.Owner属性设置窗口的所有者。