Kann, eine wpf-Anwendung eingesetzt werden, ohne kompilieren der xaml?
Ist es möglich, die Bereitstellung eines WPF-windows-Anwendung in einer solchen Weise, dass die xaml-Dateien manipuliert werden können, die zur Laufzeit? Wenn möglich, würde ich mir vorstellen, das würde funktionieren ähnlich wie ein asp.net Anwendung bereitstellen kann .aspx-Seiten als Inhalt, die dann kompiliert der just-in-time zur Laufzeit.
Möchte ich ermöglichen das einfache layout von einem Bildschirm bearbeitet werden, die zur Laufzeit durch Bearbeiten der XAML-Code. Weiß jemand, ob das möglich ist?
Edit:, Wenn ich beziehe mich auf xaml-Dateien, ich meine, die entsprechenden xaml meine UIElement Klassen. In anderen Worten, ich habe UserControl-Klassen mithilfe von Xaml und code-behind -, erbschaft -, event-Handler, assembly verweist, etc. Wenn die Bereitstellung die Zeit kommt, möchte ich, um der Lage sein, um die code-behind-Funktionalität, aber immer noch erlauben, den xaml-Code bearbeitet werden.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich habe einen anderen Vorschlag für Sie - die eigentliche Frage war:
"Ich möchte ermöglichen das einfache layout von einem Bildschirm bearbeitet werden, die zur Laufzeit durch Bearbeiten der XAML-Code. Weiß jemand, ob das möglich ist?"
Die Antwort ist definitiv "JA"! Und es gibt viele Wege, dies zu erreichen, machen einige Annahmen, natürlich.
Wenn Sie haben keine Notwendigkeit, Ereignisse zu behandeln oder schreiben Sie benutzerdefinierten Wert-Wandler (oder irgendetwas anderes, das normalerweise gehen würde in der code-behind) in der "dynamischen" Teil von XAML, dann können Sie einfach die XamlReader-Klasse zum Parsen einer XAML-Datei oder string mit XAML. Da Sie lediglich Bearbeiten Sie das layout, ich erwarte, dass diese Annahme zutrifft.
So, hier ist was ich tun würde:
1) Schreiben Sie alle Ihre benutzerdefinierten Steuerelemente, Daten, Modelle, Wert-Wandler, etc., und halten Sie diese in einer Baugruppe.
2) Belastung, die Montage, die entweder mit Ihrer app verweisen, oder laden Sie Sie dynamisch - beide funktionieren.
3) Erstellen Sie einen string/Datei/Ressource (take your pick), die hat Ihren XAML-Code, tut-layout, komplett mit der Abbildung von Ihrem .NET-namespace, um einen XML-namespace. Stellen Sie sicher, dass Sie nicht haben eine "x:Class" - Attribut auf das root-element, da Sie keine code-behind-Datei! Der string würde den standard-WPF-Steuerelemente (wie das StackPanel-Steuerelement), um layout-benutzerdefinierte Steuerelemente. (Natürlich können Sie auch schreiben, benutzerdefinierte layout-Steuerelemente).
4) Erlauben es dem Benutzer, Bearbeiten Sie diese Zeichenfolge. Wenn Sie bearbeitet haben, verwenden Sie die XamlReader analysiert die Datei und zeigt dann die resultierende UIElement, die in Ihrem Fenster.
BINGO!
Ein problem - jedes mal, wenn das XAML geändert wird, wird die GUI geworfen und eine neue erstellt. Wenn deine GUI ist sateful (auch wenn die aktuelle caret-position ist wichtig), wird der Benutzer verärgert ziemlich schnell. Es hängt davon ab, was Ihre Absicht zu verwenden ist - dies kann nicht ein Problem sein.
Erwarte ich, dass man mit etwas mehr Arbeit, Sie schreiben, könnte eine MarkupExtension, die verwendet wird, um beziehen sich auf die Teile, die Sie versuchen, Sie zu layout. Auf diese Weise konnten Sie wieder verwendet werden, wenn die layout-änderungen.
Ich hoffe, das ist klar. Wenn nicht, lass es mich wissen, und ich kann erweitern das Konzept - es würde ein schöner blog-Eintrag.
Danke unthinkableMayhem für die Referenz.
Das problem mit loose XAML ist, dass die XamlReader, wenn Sie aufgerufen wird, zur Laufzeit können keine Anschluss-Ereignissen, um Funktionen in Ihre Baugruppen, noch gibt es einen Mechanismus zum dynamischen laden von assemblies. Der Weg von Handlern für routingereignisse sind angegeben in XAML ist einer der größten design-Fehler in WPF/XAML und macht Locker XAML neben nutzlos.
Die Arbeit, die ich getan habe in der Einbettung Dynamic Language Runtime (DLR) Skripte in XAML ist nützlich für beide lose und kompilierte XAML. Meine intention war es, loose XAML-ein erste-Klasse-Bürger in WPF, indem routed events, commands, Wert-Wandlern und anderen XAML/WPF-Konzepte zur Verfügung, die in loose XAML. Ich fühle mich, dass dies gelungen ist (obwohl meine blogs gar nicht erwähnen, das dynamische laden von Assemblys, aber das ist gerade nach vorne).
Wenn Sie bleiben, ist es möglich, die Bereitstellung eines WPF-windows-Anwendung in einer solchen Weise, dass die xaml-Dateien manipuliert werden können zur Laufzeit. Heck, können Sie dynamisch generiert XAML-Code mit eingebetteten Skripten - keine Montage erforderlich. Mann, das ist eins der lustigsten Dinge, die ich gesagt habe, für eine lange Zeit.
Aber sei gewarnt - das "X" in XAML ist nur ein marketing-Begriff. Es ist jedoch nicht erweiterbar, aus technischer Sicht, so erwarten eine Welt des Schmerzes, wenn Sie aus dem Pfad von Microsoft. Ich werde glücklich sein, Ihnen zu helfen, wenn Sie diesen Weg gehen - Kontaktdaten auf meiner web-site (www.thinkbottomup.com.au).
Cheers,
Dan
Nicht leicht. Eine WPF-Anwendung hat es XAML übersetzt .g.cs und .baml durch den compiler, und wird nachfolgend für Sie zusammengestellt das binäre.
Sicherlich ist es möglich, erstellen Sie eine runtime-XAML-compiler. Dies würde keine leichte Aufgabe sein, und würde wirklich einige Gedanken darüber, warum nicht einfach tun dies als eine website!
Diesem blog-post: http://www.thinkbottomup.com.au/site/blog/Embedding_DLR_Scripts_in_XAML_Part_6 hat einige Infos zum laden von XAML zur Laufzeit sowie andere lustige Sachen.
Werfen Sie einen Blick auf http://xtrememvvm.codeplex.com/
Lässt es ermöglicht die Nutzung von loose XAML-Dateien, aber immer noch Haken in Veranstaltungen, Daten-Bindungen und Befehle weitergeleitet.
Bearbeiten auf. Okt. 7, 2012:
Auf Anfrage von Robert Harvey, ich bin der Autor der Rahmen oben erwähnt. Gar nicht versucht, irgendetwas zu verbergen dachte nur nicht, dass es relevant war, da es open source ist. In jedem Fall, ich werde sicher sein, zu offen meine Zugehörigkeit (falls vorhanden) in einem künftigen Beiträge.
XAMLPad und XAML-Cruncher beide tun es, also muss es möglich sein.
XAML-Cruncher-source-code ist verfügbar nur in Charles Petzolds Buch über WPF:
http://www.charlespetzold.com/wpf/
Sieht aus wie es verwendet XamlReader zum analysieren von XAML.
Laden Sie XAML, um die Anwendung zur Laufzeit als Gebrüll.
Gibt es ein Konzept von "loose XAML'. Loose XAML ist im Grunde die Fähigkeit, die es erlaubt Sie zu öffnen, jede XAML-Datei auf Ihrer Festplatte (oder auf einen hyperlink auf einer web-Seite) und "run", die es innerhalb eines Browsers ohne Kompilierung.
Schauen Sie sich diese Probe loose XAML-Seite, die einen Satz von Schaltflächen und benutzerdefinierten Steuerelement-Vorlagen, die ich hatte umgesetzt, http://wpf.ria-labs.com/ux.xaml in diesem blog öffnet Sie nur im IE. Sie können das laden der XAML WPF-Anwendung und ca verwendet werden.