Ich habe eine UIElement
, die ich einen Snapshot von einem Benutzer auf eine Schaltfläche klicken möchte. Wenn ein Benutzer auf die Schaltfläche klickt, möchte ich die UIElement
übernehmen und den aktuellen Status in ein Image-Element laden. Wie rende ich eine UIElement
als Image
?Silverlight 4 - Render UIElement als ein Bild
Antwort
WriteableBitmap wb = new WriteableBitmap(UIElement, new ScaleTransform() { ScaleX = 1, ScaleY = 1 });
wb.Invalidate();
Image.Source = wb;
Unter der Annahme, die FrameworkElement
Sie wollen ist elementToRender Namen machen und die Image
, wo Sie die gerenderte Ausgabe platzieren möchten genannt wird Bild, verwenden Sie den folgenden Code auf Click-Handler Ihre Schaltfläche:
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;
Dies ist eine großartige Lösung, und ich habe sie in einem meiner Projekte verwendet. Dies scheint jedoch das Bitmap des Elements so darzustellen, wie es aussieht, einschließlich Bildlaufleisten, wenn das Element beispielsweise eine große RichTextBox ist. Wissen Sie, ob es in solchen Fällen möglich ist, das gesamte Element zu rendern? – Artyom
Nein, ich glaube nicht, dass es möglich ist. Das Rendering wirkt nur auf den sichtbaren Teil des gerenderten Elements. – Bruno
Sie können auch folgendes tun:
private void SetImageSourceBasedOnElement(Image image, UIElement element)
{
if (element != null)
{
WriteableBitmap writableBitmap = new WriteableBitmap(element, null);
writableBitmap.Invalidate();
image.Source = writableBitmap;
}
}
Letztlich, nein, man kann nicht eine ganze UIElement
, einschließlich der Teile machen, die durch Scrollen Überlauf nicht sichtbar sind, usw.
Ich sah in, wie Sie, um dieses mit Reflexion bekommen konnte. Leider können Sie nicht überschreiben, wie UIElement
rendert, da es nur ein leichter Wrapper für die interne Klasse XcpImports ist, der wiederum ein Wrapper für verschiedene native Methoden ist, die in Silverlight verwendet werden. Mit anderen Worten, UIElement
und wie es gerendert wird, ist vollständig nativ, und somit gibt es keine (einfache) Möglichkeit zu überschreiben, wie es mit Reflektion angezeigt wird.
Wenn Sie den hackischen Ansatz verfolgen wollten, könnten Sie Ihr Element in ein Grid einschließen, es aus diesem Grid entfernen, es in ein anderes Grid einfügen, das die gleiche Größe wie das Element hat - sehen Sie, wohin ich gehe Dies? Aber das wäre ziemlich mühsam und bestenfalls hackisch.
- 1. Silverlight Drag & Drop für jedes UIElement?
- 2. Bild als Datenstrom im Android-Browser Render
- 3. Render Bild mit pChart
- 4. WPF render Blur Bild
- 5. möchte ein UIElement Größe erhalten
- 6. Render Flash (SWF) Frame als Bild (PDF, PNG, JPG)
- 7. Silverlight 4 PLINQ
- 8. Silverlight 4: Markenzeichen
- 9. Silverlight 4 vs 2008
- 10. Silverlight 4 AutoCompleteBox, SelectedItem
- 11. Silverlight 4: Diagrammsteuerung
- 12. Pixelschriftarten in Silverlight 4
- 13. Silverlight 4 und XBAP
- 14. Silverlight 4 Kalender nicht
- 15. Silverlight 4 Unit Testing
- 16. Render als Vorlage Bild auf einer animierten WKInterfaceImage
- 17. Zoom-Effekte für ein Bild mit Silverlight
- 18. Behaviors für Blend (Silverlight 4)
- 19. Render Web-Seite zu Bild
- 20. Ironpython 2.6.1 auf Silverlight 4
- 21. Benutzeranmeldung in Silverlight speichern 4
- 22. Render ein Tab-Zeichen (in PRE-Element) als 4 Leerzeichen in HTML?
- 23. Aufruf Communicator.UIAutomation von Silverlight 4
- 24. Schienen 4 render teilweise mit Einheimischen
- 25. Silverlight 4 Warten/Spinner Steuerelement
- 26. Wie kann ich herausfinden, wenn ein neues UIElement in Silverlight hinzugefügt wird
- 27. Silverlight 4, Ria-Dienste, HttpRequestTimedOutWithoutDetail
- 28. Silverlight 4 + MVVM + KeyDown-Ereignis
- 29. Silverlight: Bild byte []
- 30. WPF UIElement Aktualisierungsfehler?
Ich sehe nicht, wie dieser Link hilft ... Er fragt nach UIElement, kein Bildstrom. –
@PatNiemeyer, Antwort ist richtig, verstehst du Frage? –
@AkashKava Nein, Ihre Antwort ist falsch. Er hat einen Schritt verpasst. – Zenexer