如何以编程方式关闭WPF PrintDialog?我试图通过反射来调用Finalize,但这也没有关闭它。下面是我尝试过的:
using System;
using System.Reflection;
using System.Threading;
using System.Windows;
using System.Windows.Controls;
namespace WpfApplication15
{
partial class Window1 : Window
{
PrintDialog _printDialog;
public Window1()
{
InitializeComponent();
new Thread(OpenDialog).Start();
new Thread(CloseDialog).Start();
}
void OpenDialog()
{
Thread.Sleep(1000);
Dispatcher.BeginInvoke((Action)OpenDialogImpl);
}
void OpenDialogImpl()
{
_printDialog = new PrintDialog();
_printDialog.ShowDialog();
}
void CloseDialog()
{
Thread.Sleep(2000);
Dispatcher.BeginInvoke((Action)CloseDialogImpl);
}
void CloseDialogImpl()
{
var type = typeof(PrintDialog);
var flags = BindingFlags.Instance | BindingFlags.NonPublic;
var finalize = type.GetMethod("Finalize", flags);
finalize.Invoke(_printDialog, null);
MessageBox.Show("Finalized");
}
}
}发布于 2010-02-19 05:30:57
在内部,PrintDialog类使用Win32PrintDialog作为ShowDialog()方法的局部变量,该方法最终使用windows公共对话框。使用反射来获取某些东西来关闭它可能是徒劳的,或者至少是令人抓狂的。
这只是一个延伸,因为我还没有用过它,但是可以使用White向对话框的取消按钮发出一个按钮按下命令。UISpy (在白页上提到)可能也有助于实现这一目标。
https://stackoverflow.com/questions/2290751
复制相似问题