J'essaye de rendre du XAML à l'exécution. Mon XAML est construit dynamiquement dans un StringBuilder. À titre d'exemple, voici un échantillon:Générer une image au moment de l'exécution
StringBuilder xaml = new StringBuilder();
xaml.Append("<Canvas xmlns=\"http://schemas.microsoft.com/winfx/2006/xaml/presentation\" ");
xaml.Append("xmlns:x=\"http://schemas.microsoft.com/winfx/2006/xaml\" Height=\"135\" ");
xaml.Append("Width=\"210\" Background=\"White\" x:Name=\"Page\">");
string url = "http://www.mydomain.com/images/background.png";
xaml.Append("<Image Width=\"300\" Height=\"200\" Canvas.Left=\"0\" Canvas.Top=\"0\" ");
xaml.Append("x:Name=\"bgImage\" Source=\"");
xaml.Append(url);
xaml.Append("\" />");
xaml.Append("</Canvas>");
S'il vous plaît noter l'élément d'image dans cet échantillon. Si je mets ce XAML dans un fichier .xaml cela fonctionne bien. Si je le colle dans Blend, cela fonctionne très bien. Cependant, j'ai besoin d'attendre que cette image soit téléchargée et ensuite convertir le XAML rendu en .png. Pour ce faire, je suis en utilisant le code suivant:
StringReader stringReader = new StringReader(xaml.ToString());
XmlTextReader xmlReader = new XmlTextReader(stringReader);
FrameworkElement frameworkElement = (FrameworkElement)(XamlReader.Load(xmlReader));
Size availableSize = new Size(300, 200);
frameworkElement.Measure(availableSize);
frameworkElement.Arrange(new Rect(availableSize));
BitmapSource bitmap = RenderToBitmap(frameworkElement);
PngBitmapEncoder encoder = new PngBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(bitmap));
FileStream fileStream = new FileStream(filename, FileMode.Create);
encoder.Save(fileStream);
fileStream.Close();
Le problème est, le .png généré ignore toujours l'élément d'image. Je devine parce que la source d'image n'est pas téléchargée. Comment puis-je générer une image à partir de XAML à l'exécution qui inclut une image?
Merci
La raison en est que le code XAML est généré dynamiquement. Le code réel est plus complexe que ce qui est montré. La vitesse n'est pas un problème car le code XAML est utilisé sur un thread asynchrone pour générer un .png à partir du code XAML. Ma préoccupation est cependant de montrer une image si une image est utilisée. – user70192