2012-03-22 28 views
1

我有一个用户控件,它是我的应用程序的一部分,我将它呈现给一个图像,但它正在显示当前正在显示的尺寸。我想要的是将其渲染为固定的尺寸,例如500x500,但不会将其用新尺寸呈现给用户。将UserControl渲染为具有不同大小的图像,然后显示它?

UserControl temp = pane.Content; 
RadBitmap radImage = new RadBitmap(temp); // Renders UserControl to Image 
PngFormatProvider provider = new PngFormatProvider(); 

return provider.Export(radImage); // returns the Image as a png encoded Byte Array 

注意:我的UserControl是另一个控制它的UserControl的大小的孩子。

谢谢你

回答

0

我自己解决了这个问题。你需要做的是调整你想要的图片尺寸的UserControl的VisualParent大小,将你的UserControl渲染成图像,并将VisualParent的大小恢复到原来的大小。

 UserControl userControl = pane.Content; 
     ContentPresenter visualParent = (VisualTreeHelper.GetParent(userControl) as ContentPresenter); 

     double oldWidth = visualParent.Width; 
     double oldHeight = visualParent.Height; 

     visualParent.Width = BitmapImageWidth; 
     visualParent.Height = BitmapImageHeight; 
     visualParent.UpdateLayout(); // This is required! To apply the change in Width and Height 

     WriteableBitmap bmp = new WriteableBitmap(BitmapImageWidth, BitmapImageHeight); 
     bmp.Render(userControl, null); 
     bmp.Invalidate(); // Only once you Invalidate is the Control actually rendered to the bmp 
     RadBitmap radImage = new RadBitmap(bmp); 

     visualParent.Width = oldWidth; // Revert back to original size 
     visualParent.Height = oldHeight; // Revert back to original size 

     return new PngFormatProvider().Export(radImage); // returns the Image as a png encoded Byte Array