标签:
今天在WPF的项目中,写打印插件,在ViewModel中对需要弹出打印对话框,而对话框如果没有Owner所属的时候经常会被当前应用程序遮住,导致我都不知道到底弹出来没有!
参照:http://www.codeproject.com/Articles/20347/WebControls/后,果断顺利通过。
第一步定义WindowWrapper类:实现System.Windows.Forms.IWin32Window接口
1 /// <summary> 2 /// 句柄转换IWin32Window类 3 /// </summary> 4 public class WindowWrapper : System.Windows.Forms.IWin32Window 5 { 6 /// <summary> 7 /// 构造函数 8 /// </summary> 9 /// <param name="handle">句柄</param> 10 public WindowWrapper(IntPtr handle) 11 { 12 _hwnd = handle; 13 } 14 15 public IntPtr Handle 16 { 17 get { return _hwnd; } 18 } 19 20 private IntPtr _hwnd; 21 }
第二步通过应用程序名称查询获得句柄,这部分代码我是写在ViewModel中的
private void ExecuteShowDialogCommand() { Process[] procs = Process.GetProcessesByName("程序进程"); if (procs.Length != 0) { IntPtr hwnd = procs[0].MainWindowHandle; var printPreviewDocument = new PrintPreviewDialog(); printPreviewDocument.ShowDialog(new WindowWrapper(hwnd)); } else { MessageBox.Show("无此进程"); } }
如果是对话框的话同样道理
WPF MVVM 中怎样在ViewModel总打开的对话框在窗体之前
标签:
原文地址:http://www.cnblogs.com/koujian/p/4998207.html