我试图创建一些图表图像,而无需在屏幕上显示这些图表.我已经在这方面工作了很长一段时间并尝试了很多不同的东西,但似乎没有任何工作.如果我首先在窗口中显示图表,代码可以正常工作,但如果我不在窗口中显示它,则位图只是白色,带有黑色边框(不知道为什么).
我尝试在渲染之前将图表添加到边框,并为边框指定绿色borderBrush.在位图中,我看到绿色borderBrush然后是黑色边框和白色背景但没有图表.图表不包含在黑色寄宿生中,所以我不知道它来自哪里.
我已经尝试将图表添加到窗口而不调用window.Show()并再次我得到黑色边框和白色背景.但是,如果我调用window.Show(),则位图包含图表.
我已经使用drawingVisual作为解释试图在这里,同样的结果.
这是代码(不包括将元素添加到边框或窗口):
private static BitmapSource CreateElementScreenshot(FrameworkElement element, int dpi)
{
if (!element.IsMeasureValid)
{
Size size = new Size(element.Width, element.Height);
element.Measure(size);
element.Arrange(new Rect(size));
}
element.UpdateLayout();
var scale = dpi/96.0;
var renderTargetBitmap = new RenderTargetBitmap
(
(int)(scale * element.RenderSize.Width),(int)(scale * element.RenderSize.Height),dpi,dpi,PixelFormats.Default
);
// this is waiting for dispatcher to perform measure, arrange and render passes
element.Dispatcher.Invoke(((Action)(() => renderTargetBitmap.Render(element))), DispatcherPriority.Render);
return renderTargetBitmap;
}
Run Code Online (Sandbox Code Playgroud)
注意:图表是ContentControl.
无论如何我可以让图表呈现而不先在窗口中显示它吗?
所以我正在尝试使用WPF用户控件从数据集中生成大量图像,数据集中的每个项目都会生成图像...
我希望我可以设置它以便我可以使用WPF数据绑定,并且对于数据集中的每个项目,创建我的用户控件的实例,设置与我的数据项对应的依赖项属性,然后绘制用户对图像的控制,但我遇到问题,让它全部工作(不确定数据绑定或绘图是否是我的问题)
对于大规模的代码转储感到抱歉,但我一直试图让它工作几个小时,而WPF只是不喜欢我(虽然在某些方面需要学习......)
我的用户控件如下所示:
<UserControl x:Class="Bleargh.ImageTemplate"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:c="clr-namespace:Bleargh"
x:Name="ImageTemplateContainer"
Height="300" Width="300">
<Canvas>
<TextBlock Canvas.Left="50" Canvas.Top="50" Width="200" Height="25" FontSize="16" FontFamily="Calibri" Text="{Binding Path=Booking.Customer,ElementName=ImageTemplateContainer}" />
<TextBlock Canvas.Left="50" Canvas.Top="100" Width="200" Height="25" FontSize="16" FontFamily="Calibri" Text="{Binding Path=Booking.Location,ElementName=ImageTemplateContainer}" />
<TextBlock Canvas.Left="50" Canvas.Top="150" Width="200" Height="25" FontSize="16" FontFamily="Calibri" Text="{Binding Path=Booking.ItemNumber,ElementName=ImageTemplateContainer}" />
<TextBlock Canvas.Left="50" Canvas.Top="200" Width="200" Height="25" FontSize="16" FontFamily="Calibri" Text="{Binding Path=Booking.Description,ElementName=ImageTemplateContainer}" />
</Canvas>
</UserControl>
Run Code Online (Sandbox Code Playgroud)
我已经向我的用户控件添加了一个类型为"Booking"的依赖项属性,我希望它将成为数据绑定值的来源:
public partial class ImageTemplate : UserControl
{
public static readonly DependencyProperty BookingProperty = DependencyProperty.Register("Booking", typeof(Booking), typeof(ImageTemplate));
public Booking Booking
{
get { return (Booking)GetValue(BookingProperty); …Run Code Online (Sandbox Code Playgroud) 我创建具有一个WPF应用程序Canvas上,我把UserControls它们是由用户(就像Windows的窗口)可移动和调整大小.现在我已经发现这对于旧PC而言可能非常慢,这是一个问题.
作为一个解决方案,我考虑生成一个显示UserControl的图形,并在调整Control/draging时显示,以防止WPF永久重新计算所有元素.唯一的问题是我不知道如何生成这个图像.
是否有类似于.Net的功能?或者我怎么能自己做?