WPF MVVM 中怎样在ViewModel总打开的对话框在窗体之前

今天在WPF的项目中,写打印插件,在ViewModel中对需要弹出打印对话框,而对话框如果没有Owner所属的时候经常会被当前应用程序遮住,导致我都不知道到底弹出来没有!

参照:http://www.codeproject.com/Articles/20347/WebControls/后,果断顺利通过。

第一步定义WindowWrapper类:实现System.Windows.Forms.IWin32Window接口

/// <summary>

/// 句柄转换IWin32Window类

/// </summary>

public class WindowWrapper : System.Windows.Forms.IWin32Window

{

/// <summary>

/// 构造函数

/// </summary>

扫描二维码关注公众号,回复: 5545395 查看本文章

/// <param name="handle">句柄</param>

public WindowWrapper(IntPtr handle)

{

_hwnd = handle;

}

public IntPtr Handle

{

get { return _hwnd; }

}

private IntPtr _hwnd;

}


第二步通过应用程序名称查询获得句柄,这部分代码我是写在ViewModel中的

 

private void ExecuteShowDialogCommand()

{

Process[] procs = Process.GetProcessesByName("程序进程");

)

{

IntPtr hwnd = procs[].MainWindowHandle;

var printPreviewDocument = new PrintPreviewDialog();

printPreviewDocument.ShowDialog(new WindowWrapper(hwnd));

}

else

{

MessageBox.Show("无此进程");

}

}

如果是对话框的话同样道理

猜你喜欢

转载自blog.csdn.net/cuoban/article/details/86546684