Tengo un UIElement
que quiero capturar una instantánea de cuando un usuario hace clic en un botón. Cuando un usuario hace clic en el botón, quiero tomar el UIElement
y cargar su estado actual en un elemento de imagen. ¿Cómo presento un UIElement
como Image
?Silverlight 4 - Renderizar UIElement como una imagen
Respuesta
WriteableBitmap wb = new WriteableBitmap(UIElement, new ScaleTransform() { ScaleX = 1, ScaleY = 1 });
wb.Invalidate();
Image.Source = wb;
Suponiendo que el FrameworkElement
desea procesar se llama elementToRender y la Image
en la que desea colocar el resultado representado se llama imagen, utilice el siguiente código en su botón de controlador de clic:
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;
Esta es una gran solución, y la he usado en uno de mis proyectos. Sin embargo, esto parece representar el mapa de bits del elemento tal como aparece, incluidas las barras de desplazamiento si el elemento es, por ejemplo, un RichTextBox grande. ¿Sabes si es posible renderizar el elemento completo en tales casos? – Artyom
No, no creo que sea posible. La representación solo actúa en la parte visible del elemento renderizado. – Bruno
también puede hacer lo siguiente:
private void SetImageSourceBasedOnElement(Image image, UIElement element)
{
if (element != null)
{
WriteableBitmap writableBitmap = new WriteableBitmap(element, null);
writableBitmap.Invalidate();
image.Source = writableBitmap;
}
}
En última instancia, no, no se puede suponer que la totalidad de una UIElement
, incluyendo las partes que no son visibles debido al desbordamiento de desplazamiento, etc.
Miré en cómo se puede evitar esto usando la reflexión. Desafortunadamente, no puede anular la forma en que se renderiza UIElement
, ya que es solo un contenedor ligero para la clase interna XcpImports, que a su vez es un contenedor para varios métodos nativos utilizados en todo Silverlight. En otras palabras, UIElement
y cómo se procesa es completamente nativo, y por lo tanto no hay una forma (fácil) de anular cómo se muestra mediante la reflexión.
Si desea adoptar el enfoque de hack, puede incluir su elemento en una cuadrícula, quitarlo de esa cuadrícula, ponerlo en otra cuadrícula que tenga el mismo tamaño que el elemento - vea a dónde voy con ¿esta? Pero eso sería bastante complicado, y hackoso en el mejor de los casos.
- 1. Renderizar HTML como una imagen
- 2. Renderizar una imagen
- 3. UIElement vs FrameworkElement en WPF/Silverlight
- 4. Silverlight 4 PLINQ
- 5. Renderizar marco de flash (SWF) como imagen (PDF, PNG, JPG)
- 6. wsHttpBinding en Silverlight 4
- 7. Evento Silverlight 4 + MVVM + KeyDown
- 8. Silverlight 4 Botón predeterminado Servicio
- 9. Comportamientos de mezcla (Silverlight 4)
- 10. Silverlight 4 RelativeSource FindAncestor vinculante
- 11. Silverlight: Imagen de byte []
- 12. Guardar una imagen de un UIElement rindió mayor de lo que aparece en la pantalla
- 13. Renderizar byte [] a imagen usando jQuery
- 14. C#: Renderizar objeto como XML
- 15. ¿Dónde puedo obtener el "Silverlight Developer Runtime" para Silverlight 4?
- 16. Actualización de Silverlight 4 a Silverlight 5 causando AccessViolationException
- 17. ¿Cómo enlazar a una propiedad singleton en Silverlight 4?
- 18. Renderizar página web a la imagen
- 19. Exportar informe de Crystal como una imagen
- 20. ¿Cómo puedo renderizar texto envuelto en una imagen en java
- 21. Cómo liberar objetos COM en Silverlight 4
- 22. UIElement vs FrameworkElement
- 23. Renderizar una cadena de imágenes como un video en javascript
- 24. Silverlight 4 Equivalente a WPF "x: estático"
- 25. ckeditor dinámicamente add uiElement
- 26. ¿Renderizar una jerarquía usando LINQ?
- 27. Silverlight 4/5 OOB Menú de ventana
- 28. detección de estado inactivo Silverlight 4 aplicación
- 29. Localización en Silverlight 4 usando ResourceWrapper
- 30. silverlight 4, cargando dinámicamente módulos xap
No veo cómo funciona ese enlace ... Está preguntando sobre UIElement, no sobre la transmisión de una imagen. –
@PatNiemeyer, la respuesta es correcta, ¿entiendes la pregunta? –
@AkashKava No, su respuesta es incorrecta. Él perdió un paso. – Zenexer