在C#中如何从WPF绘制UIElement?

在C#中如何从WPF绘制UIElement?,c#,wpf,C#,Wpf,我想在位图上绘制包含6个文本框的StockPanel1,然后更改第一个文本框中的字体大小,并在上一个文本框旁边再次绘制StockPanel1。但当我运行代码时,两个图形是相同的 我的代码: BitmapEncoder pngEncoder = new PngBitmapEncoder(); var finalBitmap = new RenderTargetBitmap(4000, 4000, 120, 120, PixelFormats.Pbgra32); DrawingVisual dv =

我想在位图上绘制包含6个文本框的StockPanel1,然后更改第一个文本框中的字体大小,并在上一个文本框旁边再次绘制StockPanel1。但当我运行代码时,两个图形是相同的

我的代码:

BitmapEncoder pngEncoder = new PngBitmapEncoder();
var finalBitmap = new RenderTargetBitmap(4000, 4000, 120, 120, PixelFormats.Pbgra32);
DrawingVisual dv = new DrawingVisual();

using (DrawingContext dc = dv.RenderOpen())
    {
        this.DrawTextBoxes(this.StackPanel1, dc, 0, 0);
        Console.WriteLine("height: " + this.TextBox1.RenderSize.Height);
        Console.WriteLine(this.TextBox1.FontSize.ToString());
        this.TextBox1.FontSize += 1;
        this.TextBox1.Text = "changed";
        Console.WriteLine(this.TextBox1.FontSize.ToString());
        Console.WriteLine("height: " + this.TextBox1.RenderSize.Height);
        this.DrawTextBoxes(this.StackPanel1, dc, 500, 0);
    }

finalBitmap.Render(dv);
pngEncoder.Frames.Add(BitmapFrame.Create(finalBitmap));

using (var file = File.OpenWrite("TestImage.png"))
   {
       pngEncoder.Save(file);
   }
DrawTextBox方法:

public void DrawTextBoxes(UIElement element, DrawingContext dc, double x, double y)
    {
        var target = new RenderTargetBitmap((int)(element.RenderSize.Width/0.8), (int)(element.RenderSize.Height/0.8), 120, 120, PixelFormats.Pbgra32);
        target.Render(element);
        var frame = BitmapFrame.Create(target);
        dc.DrawImage(frame, new Rect(x, y, frame.Width, frame.Height));
    }
我在输出中得到:

height: 20,31
15
16
height: 20,31
这意味着fintsize会发生变化,但整个文本框不会发生变化。在应用程序窗口中,我可以看到文本框更改了文本和大小。
我做错了什么?

我看不到布局通行证。当您第二次访问
TextBox1.RenderSize
时,它不会被更新。。。不过,谢谢你!!看来这就是问题所在。我添加了UpdateLayout();在第二次绘图之前,它工作正常。我看不到布局通过。当您第二次访问
TextBox1.RenderSize
时,它不会被更新。。。不过,谢谢你!!看来这就是问题所在。我添加了UpdateLayout();在第二次绘图之前,它工作正常。