J'ai un UIElement
que je veux capturer un instantané de quand un utilisateur clique sur un bouton. Quand un utilisateur clique sur le bouton, je veux prendre le UIElement
et charger son état actuel dans un élément Image. Comment afficher un UIElement
en tant que Image
?Silverlight 4 - Render UIElement comme une image
Répondre
WriteableBitmap wb = new WriteableBitmap(UIElement, new ScaleTransform() { ScaleX = 1, ScaleY = 1 });
wb.Invalidate();
Image.Source = wb;
En supposant que le FrameworkElement
vous voulez rendre est nommé elementToRender et le Image
où vous voulez placer la sortie rendu est appelé l'image, utilisez le code suivant sur le gestionnaire de clic de votre bouton:
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;
Ceci est une excellente solution, et je l'ai utilisé dans un de mes projets. Cependant, cela semble rendre le bitmap de l'élément tel qu'il apparaît, y compris les barres de défilement si l'élément est, disons, un grand RichTextBox. Savez-vous s'il est possible de rendre l'ensemble de l'élément dans de tels cas? – Artyom
Non, je ne pense pas que ce soit possible. Le rendu agit simplement sur la partie visible de l'élément rendu. – Bruno
Vous pouvez également effectuer les opérations suivantes:
private void SetImageSourceBasedOnElement(Image image, UIElement element)
{
if (element != null)
{
WriteableBitmap writableBitmap = new WriteableBitmap(element, null);
writableBitmap.Invalidate();
image.Source = writableBitmap;
}
}
En fin de compte, non, vous ne pouvez pas rendre tout le UIElement
, y compris les parties qui ne sont pas visibles en raison de trop-plein défilement, etc.
Je regardais la façon dont vous pouvez contourner cela en utilisant la réflexion. Malheureusement, vous ne pouvez pas remplacer le rendu UIElement
, car il s'agit juste d'un wrapper léger pour la classe interne XcpImports, qui est à son tour un wrapper pour diverses méthodes natives utilisées dans Silverlight. En d'autres termes, UIElement
et comment il est rendu est complètement natif, et donc il n'y a pas de moyen (facile) de contourner la façon dont il affiche en utilisant la réflexion. Si vous voulez adopter l'approche hackish, vous pouvez placer votre élément dans une grille, l'enlever de cette grille, la placer dans une autre grille de la même taille que l'élément - voir où je vais ce? Mais ce serait tout à fait une dispute, et au mieux hackish.
- 1. flex 4 render html
- 2. ScrollViewer coupe mon image - silverlight 4
- 3. SIlverlight 4, FilterDescriptor et GUID comme FilterOperator
- 4. LINQ pour supprimer UIElement dans SilverLight enfants
- 5. MVC Render JsonResult comme littérales
- 6. Utilisez UIElement comme Clip dans WPF
- 7. Silverlight Faites glisser et déposez pour n'importe quel UIElement?
- 8. Comment enregistrer une toile comme une image
- 9. Silverlight 4 WriteableBitmap ScaleTransform Exception mais travaillait dans v3
- 10. Render WriteableBitmap dans WPF
- 11. Silverlight 4 Diffusion multicast
- 12. Référence Silverlight 4 commande de Silverlight 3
- 13. Silverlight 4 Compression audio
- 14. Silverlight 4 et XBAP
- 15. LevelToVisibilityConverter dans Silverlight 4
- 16. Silverlight 4 Premier ColorAnimation
- 17. thème avec Silverlight 4
- 18. Prises avec Silverlight 4
- 19. ILMerge pour Silverlight 4
- 20. Silverlight 4 PLINQ
- 21. Silverlight 4 & SQLite
- 22. Silverlight 4 XAML Collections
- 23. Résolution de l'interface comme UIElement (Unity, PRISM, C#)
- 24. Silverlight 4: OnBeforeUnload
- 25. Utilisation du contrôle d'image dans Silverlight (4)
- 26. WCF RIA, Silverlight 4
- 27. Silverlight 4 Problème asynchrone
- 28. WPF Checkbox n'affiche pas un UIElement comme son contenu
- 29. Silverlight 3 namespace manquant dans Silverlight 4
- 30. Enregistrement d'une image incorporée dans Silverlight RichTextBox
Je ne vois pas comment ce lien aide ... Il pose des questions sur UIElement, pas un flux d'images. –
@PatNiemeyer, réponse est correcte, comprenez-vous la question? –
@AkashKava Non, votre réponse est incorrecte. Il a raté un pas. – Zenexer