我有UIElement
我希望捕获用户点击按钮时的快照。当用户单击该按钮时,我想获取UIElement
并将其当前状态加载到Image元素中。如何将UIElement
呈现为Image
?
答案 0 :(得分:13)
假设您要渲染的FrameworkElement
名为 elementToRender ,而您要放置渲染输出的Image
称为 image ,在按钮的点击处理程序中使用以下代码:
var writeableBitmap = new WriteableBitmap((int)elementToRender.RenderSize.Width, (int)elementToRender.RenderSize.Height);
writeableBitmap.Render(elementToRender, new ScaleTransform() { ScaleX = 1, ScaleY = 1 });
writeableBitmap.Invalidate();
image.Source = writeableBitmap;
答案 1 :(得分:2)
您还可以执行以下操作:
private void SetImageSourceBasedOnElement(Image image, UIElement element)
{
if (element != null)
{
WriteableBitmap writableBitmap = new WriteableBitmap(element, null);
writableBitmap.Invalidate();
image.Source = writableBitmap;
}
}
答案 2 :(得分:0)
WriteableBitmap wb = new WriteableBitmap(UIElement, new ScaleTransform() { ScaleX = 1, ScaleY = 1 });
wb.Invalidate();
Image.Source = wb;
答案 3 :(得分:0)
最终,不,你不能渲染整个UIElement
,包括因滚动溢出而不可见的部分等。
我研究了如何使用反射解决这个问题。不幸的是,你无法覆盖UIElement
呈现的方式,因为它只是内部类XcpImports的一个轻量级包装器,而后者又是Silverlight中使用的各种本机方法的包装器。换句话说,UIElement
以及它的呈现方式完全是原生的,因此没有(简单的)方法来覆盖它使用反射显示的方式。
如果您想采用hackish方法,可以将元素包含在Grid中,将其从该网格中移除,将其放入与元素大小相同的另一个网格中 - 请参阅我要使用的内容?但那将是一件非常麻烦的事情,而且充其量只是一种骚扰。