c++/clr/win32 dll und wpf/xaml
-
Hallo,
ich möchte in meiner Win32 DLL WPF Elemente erzeugen, was auch klappt.
Mein Problem ist, diese zu gestalten, ich könnte zwar hunderte Zeilen Objekt.Eigenschaften tippen, aber ich würde das gern per XAML gestalten. D.h. wärend der Laufzeit soll z.B. aus einer Datei XAML Code geladen werden und auf das Objekt (z.B. Kalender) angewendet werden. Ich habe einen Hinweis auf einen "XAMLReader" gefunden aber wie ich den an das Element binden soll, k.A.http://msdn.microsoft.com/en-us/library/ms742522(v=vs.100).aspx
(unter "WPF Interoperation Projects" -> Use Load to load any XAML at run time, instead of compiling your XAML.)
-
Ich habe inzwischen ein wenig herumexperimentiert, um mein Problem besser zu zeigen hier ein Ausschnitt:
//Kalender Calendar Kal; //WPF Fenster Window w; //Hier wird der Inhalt des Fensters festgelegt, und hier müsste ich auch XAML reinbekommen w.Content = %Kal; //Fenster anzeigen Application().Run(%w);
Rein theoritsich müsste der gesamte XAML Code an w.Content übergeben werden, Content erfordert ein "XmlSchemaContent" Objekt leider hat das kaum brauchbare Methoden, ganz im Gegensatz zu "XmlSchema" bei diesem kann man sogar wunderbar einen String einlesen
XmlSchema^ xaml; xaml->Read(gcnew System::IO::StringReader(MeinString),gcnew ValidationEventHandler(ShowCompileError))
Allerdings unterstützt XmlSchema leider nicht "http://schemas.microsoft.com/winfx/2006/xaml/presentation" (laut Fehlermeldung)
-
Ok, ich denke ich habe es nun gelöst, falls noch wer vor dem Problem steht, hier die Lösung:
Beispiel für Kalender:Calendar^ cal = (Calendar^)System::Windows::Markup::XamlReader::Load(gcnew System::Xml::XmlTextReader(gcnew System::IO::StringReader(euerXamlString)));
der XAML-String muss in diesem Schema aufgebaut sein:
(größer als)Calendar xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:System="clr-namespace:System;assembly=mscorlib" Height="203" Width="210"/>
Hinweis: anders als in C# dürfen (und ist auch nicht nötig) keine Events in XAML enthalten sein
-
(größer als)=kleiner als
(musste das so schreiben, sonst zerschießt es das Spamschutzformular des Forums)