Визуализировать UserControl в изображение с размером, отличным от того, на котором он отображается? - PullRequest
1 голос
/ 23 марта 2012

У меня есть UserControl, который является частью моего приложения, я отображаю его в изображение, но оно отображается с размерами, при которых оно отображается в данный момент. Я хотел бы сделать это с фиксированными размерами, скажем, 500x500, но без визуализации с новыми размерами для пользователя.

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

Примечание. My UserControl является дочерним элементом другого элемента управления, который определяет размер моего UserControl.

Спасибо

1 Ответ

0 голосов
/ 04 апреля 2012

Я решил это сам. Что вам нужно сделать, это изменить размер VisualParent вашего UserControl в соответствии с размерами, которые вы хотите, чтобы ваша картинка была, визуализировать ваш 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
...