Wpf 使用未渲染控件的视觉笔刷?

Wpf 使用未渲染控件的视觉笔刷?,wpf,image,wpf-controls,rendering,visualbrush,Wpf,Image,Wpf Controls,Rendering,Visualbrush,我现在正在玩弄一个想法,我遇到了麻烦。我正在使用一个控制台应用程序创建一个视觉控件DevExpress chartcontrol,以便在内存中精确显示,然后我尝试使用VisualBrush将该控件保存到一个图像中,但它不起作用,因为我假设该控件未绘制到屏幕上 我把代码放在下面,这样你就知道我现在在哪里了。有人知道我如何可能保存这个控制到一个理想的jpg图像,但任何事情都可以。。。使用控制台应用程序?我真的不想把它渲染到屏幕上,哪怕是一毫秒也能保存它 static void sl_CreateDe

我现在正在玩弄一个想法,我遇到了麻烦。我正在使用一个控制台应用程序创建一个视觉控件DevExpress chartcontrol,以便在内存中精确显示,然后我尝试使用VisualBrush将该控件保存到一个图像中,但它不起作用,因为我假设该控件未绘制到屏幕上

我把代码放在下面,这样你就知道我现在在哪里了。有人知道我如何可能保存这个控制到一个理想的jpg图像,但任何事情都可以。。。使用控制台应用程序?我真的不想把它渲染到屏幕上,哪怕是一毫秒也能保存它

static void sl_CreateDetail(FrameworkElement chartControl1, CreateAreaEventArgs e)
{
        var brush = new VisualBrush(chartControl1);
        var visual = new DrawingVisual();
        DrawingContext context = visual.RenderOpen();

        context.DrawRectangle(brush, null,
            new Rect(0, 0, chartControl1.ActualWidth, chartControl1.ActualHeight));
        context.Close();

        var bmp = new RenderTargetBitmap((int)chartControl1.ActualWidth,
            (int)chartControl1.ActualHeight, 96, 96, PixelFormats.Pbgra32);

        bmp.Render(visual);
        e.Data = bmp;
}

在呈现控件之前,必须通过调用和手动进行布局。这需要指定控件的所需大小,例如通过显式设置其宽度和高度属性

不需要VisualBrush和DrawingVisual,您可以直接将控件渲染到RenderTargetBitmap

chartControl1.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));
chartControl1.Arrange(new Rect(0, 0, chartControl1.Width, chartControl1.Height));
chartControl1.UpdateLayout();

var bmp = new RenderTargetBitmap((int)chartControl1.ActualWidth,
    (int)chartControl1.ActualHeight, 96, 96, PixelFormats.Pbgra32);

bmp.Render(chartControl1);
如果控件在按度量布局期间计算首选大小,则可能可以使用其属性进行渲染

chartControl1.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));
chartControl1.Arrange(new Rect(new Point(), chartControl1.DesiredSize));
chartControl1.UpdateLayout();
还要注意,渲染线程必须是STA。在控制台应用程序中,您可以简单地将属性应用于Main方法

[STAThread]
static void Main(string[] args)
{
    ...
}

我试着测量,安排,等等,然后发现,如果视觉有一个家长,这些工作!在我的例子中,我从一个容器中移除了视觉效果,更新了它的属性、颜色等等,然后尝试将它用作视觉画笔,但它没有得到更新。在测量期间将其保留在原始容器中,并安排修复,即使所有操作都在屏幕外完成。

我进行了测量/安排,但它不起作用。我已经准备好了STA线程的东西。我必须迅速改变我的方法,以便在一个小的演示中得到一些有用的东西。在接下来的几天里,我将改变我的方法,尽快尝试你的完整建议。