【问题标题】:WPF - Print contents of ListView?WPF - 打印 ListView 的内容?
【发布时间】:2011-01-30 20:00:56
【问题描述】:

我创建了自己的用户控件,它使用 ListView 来显示任意项目列表。在我的项目中的每个页面上,ListView 的列在 XAML 中,然后绑定到我的对象。

现在我要做的是在我的控件中编写一个 Print 方法,该方法将打印出 ListView 的全部内容。

我阅读了一个类似的问题,其中的答案是我应该将我的 ItemsSource 转换为表格。如果这确实是完成此任务的方法,那么有人可以指导我完成该过程以获取任意对象吗?

谢谢,
桑尼

【问题讨论】:

    标签: c# wpf listview printing


    【解决方案1】:

    由于ListView 派生自Visual,也许您可​​以使用PrintVisual() 方法打印列表视图本身:

    new PrintDialog().PrintVisual(yourListView, "Print Job Description");
    

    【讨论】:

    • 这也是我的第一直觉。不幸的是,对于我的一些包含大量项目的 ListView,它希望显示滚动条而不是所有项目。你知道解决办法吗?
    • @Sonny, this question 谈到了同样的问题。接受的答案使用FlowDocument 来保存列表视图项。
    • @Fréd - 我将如何为任意对象执行此操作?我不确定如何从 ListView 中获取行和列的集合,以便我可以遍历它们...
    • @Sonny,你可以直接枚举你的ItemsSource。这是一个IEnumerable,所以foreach 循环和LINQ 查询将在它上面工作。
    • @Fréd - 但是我不必为 ListView 中显示的每种类型的对象编写一个特殊情况吗?我使用了许多转换器和模板来让我的对象显示在 ListView 中。通过遍历 ItemsSource,我直接处理对象并绕过我在打印过程中尝试保留的所有格式。
    【解决方案2】:

    嗯...我终于(有点)解决了这个问题。

    我已经遍历了我的 ListView 中的 GridViewColumns,并且对于每一列,我还遍历了 ListView 的 ItemSource 并使用反射来获取 DisplayMemberBinding.Path.Path,然后我可以使用它来获取属性的值。

    DisplayMemberBinding 还包含我所有转换器的信息,所以我可以开始了。

    它很慢(ListView 中的 400 行大约需要 10 秒),但它可以工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-11-20
      • 1970-01-01
      • 1970-01-01
      • 2011-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多