加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 强制加载WPF Visual的适当方法

发布时间:2020-12-15 17:51:03 所属栏目:百科 来源:网络整理
导读:我一直在努力打印使用 System.Printing 命名空间.我终于弄清楚,当使用API??的部分时,我获得空白的原因是因为我正在尝试打印的 Visual 对象未被加载/初始化.如果通过将Visual对象放在适当大小的Windows中并在打印之前调用Show()来显示Visual对象,则可以获得预
我一直在努力打印使用 System.Printing命名空间.我终于弄清楚,当使用API??的部分时,我获得空白的原因是因为我正在尝试打印的 Visual对象未被加载/初始化.如果通过将Visual对象放在适当大小的Windows中并在打印之前调用Show()来显示Visual对象,则可以获得预期的结果.

因此,我想出的解决方法是为每个Visual调用此方法

public static void ShowVisual(Visual visual)
{
    Window window = new Window
        {
            Content = visual,SizeToContent = SizeToContent.WidthAndHeight,Visibility = Visibility.Hidden
        };
    window.Show();
    window.Close();
}

这似乎是一个黑客,特别是因为用户简单地看到了Window-frame画面.我认为必须有一种不同的方式来实现.不过,我并没有提出任何其他解决方案.是否使用隐藏的窗口真的应该在这里完成?

使用WPF – Get size of UIElement in Memory?所述的MenuItem不起作用.我看着Force rendering of a WPF control in memory,但是我并不是真的想将Visual渲染到一个似乎是这样的位图.在wpf force to build visual tree中描述的图像上调用ApplyTemplate()没有帮助.

编辑:这是从上面使用而不是ShowVisual的解决方案

/// <remarks>
/// This method needs to be called in order for 
//  the element to print visibly at the correct size.
/// </remarks>
private static void ArrangeElement(UIElement element)
{
    var box = new Viewbox {Child = element};

    box.Measure(new Size(double.PositiveInfinity,double.PositiveInfinity));
    box.Arrange(new Rect(box.DesiredSize));
}

解决方法

要打印的项目需要添加到WPF中的视觉树中,以便对要显示/打印或以其他方式显示的视觉树中的所有元素调用“测量和排列”流程.

我没有这样做一段时间,但是您可能会发现在后台添加这些项目到ViewPort,然后打印出来解决了这个问题.这应该能够在屏幕上实际显示它们,从而使用户看到它们同时也强制测量/排列过程.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读