我正在使用来自MS Excel加载项(VSTO)功能区按钮的单个组合框打开WPF窗口 . 问题是在随机窗口环境中点击组合框后,下拉选择选项显示在excel前面,而窗口本身隐藏在它后面 . 一旦完成选择,WPF窗口再次显示在excel的前面 . 如果我删除了窗口的所有者,那么组合框和窗口都正常显示但是我失去了当前窗口的效果以永久保留在当前Excel窗口的前面 . 同样,我想指出,在大多数环境中,波纹管代码工作正常,除了Windows 8,偶尔在虚拟机托管的windows7中 . 任何想法我的方法有什么问题?
var thread = new Thread(() =>
{
var wpfWindow = new WPFWindow();
var ownerWindowHandle = (IntPtr)Globals.ThisAddIn.Application.Hwnd;
var helper = new WindowInteropHelper(wpfWindow);
helper.Owner = ownerWindowHandle; // COMMENT THAT AND IT WORKS PROPERLY
wpfWindow.Show();
wpfWindow.Closed += (sender2, e2) => wpfWindow.Dispatcher.InvokeShutdown();
Dispatcher.Run();
});
thread.SetApartmentState(ApartmentState.STA);
thread.Start();
1 回答
WPF窗口定义上有TopMost属性:https://msdn.microsoft.com/en-us/library/system.windows.window.topmost.aspx
在XAML定义中将TopMost属性设置为True:
省略号是您的其他声明goo的位置,该示例仅显示如何添加Topmost属性 .
显然,如果你使用代码构建WPFWindow,你应该在那里设置Topmost属性 .