我有一个UIElement
我想捕获用户单击按钮时的快照。当用户单击按钮时,我想将UIElement
其当前状态加载到 Image 元素中。如何将 a 渲染UIElement
为Image
?
问问题
3485 次
4 回答
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;
于 2012-02-03T18:23:55.567 回答
2
您还可以执行以下操作:
private void SetImageSourceBasedOnElement(Image image, UIElement element)
{
if (element != null)
{
WriteableBitmap writableBitmap = new WriteableBitmap(element, null);
writableBitmap.Invalidate();
image.Source = writableBitmap;
}
}
于 2012-02-03T20:47:44.643 回答
0
WriteableBitmap wb = new WriteableBitmap(UIElement, new ScaleTransform() { ScaleX = 1, ScaleY = 1 });
wb.Invalidate();
Image.Source = wb;
于 2010-05-06T20:55:57.133 回答
0
最终,不,您不能渲染整个UIElement
,包括由于滚动溢出等原因不可见的部分。
我研究了如何使用反射来解决这个问题。不幸的是,您无法覆盖UIElement
渲染方式,因为它只是内部类 XcpImports 的轻包装器,而 XcpImports 又是整个 Silverlight 中使用的各种本机方法的包装器。换句话说,UIElement
它的渲染方式完全是原生的,因此没有(简单的)方法可以使用反射覆盖它的显示方式。
如果您想采用 hackish 方法,您可以将您的元素包含在一个 Grid 中,将其从该网格中删除,然后将其放入另一个与该元素大小相同的网格中 - 看看我打算用这个去哪里?但这会很麻烦,而且充其量也是骇人听闻的。
于 2012-02-09T19:36:06.153 回答