【问题标题】:WPF: How can I programatically close a PrintDialog?WPF:如何以编程方式关闭 PrintDialog?
【发布时间】:2010-02-18 17:33:21
【问题描述】:

如何以编程方式关闭 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");
        }
    }
}

【问题讨论】:

  • 用户无法手动关闭此对话框是否有原因?也许您可以针对您的问题发布一些背景信息,这可能会有所帮助。谢谢!
  • 我要实现自动注销。
  • 我遇到了类似的问题并在这里发布了答案; stackoverflow.com/questions/17282082/…

标签: wpf winapi printing printdialog


【解决方案1】:

在内部,PrintDialog 类使用Win32PrintDialog 作为ShowDialog() 方法的局部变量,该方法最终使用Windows 通用对话框。使用反射来关闭它可能是徒劳的,或者至少令人抓狂。

只是一个延伸,因为我没有使用它,但可以使用White 向对话框的取消按钮发出按钮按下。 UISpy(在白页上提到)可能也很方便。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-15
    • 2015-11-26
    • 2020-07-08
    • 2013-07-04
    • 2010-11-17
    • 2016-03-08
    • 1970-01-01
    相关资源
    最近更新 更多