Вопрос по image, render, uielement, silverlight – Silverlight 4 - визуализация UIElement как изображения

10

у меня естьUIElement я хочу сделать снимок, когда пользователь нажимает кнопку. Когда пользователь нажимает кнопку, я хочу взятьUIElement и загрузите его текущее состояние в элемент Image. Как я могу сделатьUIElement какImage?

Ваш Ответ

4   ответа
2

private void SetImageSourceBasedOnElement(Image image, UIElement element)
{
    if (element != null)
    {
        WriteableBitmap writableBitmap = new WriteableBitmap(element, null);
        writableBitmap.Invalidate();

        image.Source = writableBitmap;
     }
 }
0
WriteableBitmap wb = new WriteableBitmap(UIElement, new ScaleTransform() { ScaleX = 1, ScaleY = 1 });
wb.Invalidate();
Image.Source = wb;
@PatNiemeyer, ответ правильный, ты понимаешь вопрос? Akash Kava
@AkashKava Нет, ваш ответ неверен. Он пропустил шаг. Zenexer
Я не вижу, как эта ссылка помогает ... Он спрашивает о UIElement, а не о потоке изображений. Pat Niemeyer
13

чтоFrameworkElement вы хотите сделать рендерelementToRender и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;
Нет, я не думаю, что это возможно. Рендеринг действует только на видимую часть визуализируемого элемента. Bruno
Это отличное решение, и я использовал его в одном из своих проектов. Тем не менее, кажется, что это рендеринг растрового изображения элемента в том виде, в котором он появляется, включая полосы прокрутки, если элемент, скажем, большой RichTextBox. Знаете ли вы, можно ли визуализировать весь элемент в таких случаях? Artyom
0

UIElementвключая части, которые не видны из-за переполнения прокрутки и т. д.

Я посмотрел, как можно обойти это, используя отражение. К сожалению, вы не можете изменить какUIElement выполняет рендеринг, поскольку это всего лишь легкая оболочка для внутреннего класса XcpImports, который, в свою очередь, представляет собой оболочку для различных собственных методов, используемых в Silverlight. Другими словами,UIElement и то, как он отображается, является полностью нативным, и, таким образом, нет (простого) способа переопределить способ отображения с помощью отражения.

Если вы хотите использовать хакерский подход, вы можете заключить свой элемент в сетку, удалить его из этой сетки, поместить в другую сетку того же размера, что и элемент - посмотрите, куда я иду с этим? Но это было бы довольно хлопотно, и в лучшем случае хакерски.

Похожие вопросы