今天在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>
/// <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("無此進程");
}
}
如果是對話框的話同樣道理