不知道大家有没有遇到过需要使用自定义messagebox的问题,在mvvm模式下存在多级弹窗时不好指定Owner属性。直接指定主窗口可能导致窗口顺序错乱问题;
然后想到一个取巧的办法:
/// <summary>
/// 获取当前活动窗口句柄:
/// </summary>
/// <returns></returns>
[DllImport("user32.dll", CharSet = CharSet.Auto, ExactSpelling = true)]
public static extern IntPtr GetForegroundWindow();
获取到最顶层的活动窗口句柄, 也就是我们操作的窗口(一定是软件最顶层的一个弹窗?)
然后强制转换为 Window 类型
Window xx = (Window)System.Windows.Interop.HwndSource.FromHwnd(ptr).RootVisual;
最后
UCMessageWindow messagebox = new UCMessageWindow();
messagebox.Owner = xx;
messagebox.ShowDialog();