问题描述
我有一个名为UserControl1的简单UserControl,其中包含一个TextBlock:
I have a simple UserControl called UserControl1 that contains a TextBlock:
<UserControl x:Class="WpfApplication2.UserControl1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="300">
<Grid>
<TextBlock Text="{Binding}"/>
</Grid>
</UserControl>
我初始化了它的新实例,并在代码中为其提供了DataContext。当窗口关闭时,我必须将此控件绘制到图像文件。
UserControl不会在已创建的文件中渲染边界文本。
I initialized a new instance of it and gave it a DataContext in code. when the window is closing I have to draw this control to an image file.The UserControl does not render the bounded text in the file that been created.
这是我使用用户控件的代码:
and this is my code using the usercontrol:
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
Closing += MainWindow_Closing;
}
void MainWindow_Closing(object sender, CancelEventArgs e)
{
UserControl1 uc = new UserControl1();
uc.DataContext = "hello";
uc.Height = 100;
uc.Width = 100;
uc.Background = Brushes.LightBlue;
DrawToImage(uc);
}
private void DrawToImage(FrameworkElement element)
{
element.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));
element.Arrange(new Rect(element.DesiredSize));
RenderTargetBitmap bitmap = new RenderTargetBitmap((int)element.Width, (int)element.Height,
120.0, 120.0, PixelFormats.Pbgra32);
bitmap.Render(element);
BitmapEncoder encoder = new PngBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(bitmap));
using (Stream s = File.OpenWrite(@"C:\555.png"))
{
encoder.Save(s);
}
}
}
我希望这很清楚,任何帮助将不胜感激。
I Hope It's clear enough, any help will be very appreciated.
推荐答案
您只是忘了在手动测量/排列后,在控件上强制进行Layout更新(
You just forgot to force a Layout update on your control after manually Measuring/Arrangeing it (which will not be enough to force binding resolving).
对使其起作用:
private void DrawToImage(FrameworkElement element)
{
element.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));
element.Arrange(new Rect(element.DesiredSize));
element.UpdateLayout();
RenderTargetBitmap bitmap = new RenderTargetBitmap((int)element.Width, (int)element.Height,
120.0, 120.0, PixelFormats.Pbgra32);
bitmap.Render(element);
BitmapEncoder encoder = new PngBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(bitmap));
using (Stream s = File.OpenWrite(@"C:\555.png"))
{
encoder.Save(s);
}
}
编辑:有关绑定何时解决的更多信息:
Edit : More on when bindings are resolved : link
这篇关于将FrameworkElement及其DataContext保存到图像文件不会成功的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!