2 Stimmen

WPF "Skinning" d.h. Ersetzen eines Fensterlayouts durch ein völlig anderes

WPF Noob Frage:

Können WPF-Anwendungen können ihr Aussehen zur Laufzeit ändern lassen? Ich verstehe, durch Stile, dass man das Aussehen der Steuerelemente und UI-Elemente ändern kann, aber ich war envisoning etwas mehr entlang der Linien von zwei Anwendungen: eine "Editor"-Anwendung und eine "Spiel"-Anwendung, beide laufen im Wesentlichen den gleichen Code, aber mit einem völlig unterschiedlichen UI-Layout (letztere mit weniger Schaltflächen, einfachere Steuerelemente, Menüpunkte, etc.) Das Layout der "Spiel"-Benutzeroberfläche könnte von einem Künstler entworfen werden, im Allgemeinen von jemandem, der keinen Zugriff auf den zugrunde liegenden Code hat.

Wie gehe ich vor, um so etwas zu tun? Ich bräuchte nur einen Ansatzpunkt.

Gracias.

1voto

sipsorcery Punkte 29399

Sie haben so ziemlich unbegrenzte Flexibilität, um das Aussehen Ihrer WPF-Anwendung zur Laufzeit zu verwalten, so dass das, was Sie vorschlagen, durchaus machbar ist.

Ohne die vollständigen Details Ihrer Anwendung zu kennen, klingt es so, als ob Sie zwei verschiedene Sätze von UI-Steuerelementen erstellen könnten, eines für Redakteure und eines für Spieler, und beide dieselben zugrunde liegenden Biz-Logikklassen verwenden.

Um auszuwählen, in welchem Modus Ihre Anwendung zur Laufzeit ausgeführt werden soll, müssen Sie entscheiden, welchen Benutzertyp Sie hinzufügen und das Steuerelement für die Editor- oder Gamer-Benutzeroberfläche entsprechend auf dem Hauptlayout-Container platzieren.

private void Window_Loaded(object sender, RoutedEventArgs e)
{
     if(user == editor) {
         this.LayoutRoot.Children.Add(editorUserControl);
     }
     else {
         this.LayoutRoot.Children.Add(gamerUserControl);
     }
}

Und es gibt noch unzählige andere Möglichkeiten, die Sie nutzen können.

1voto

Marthinus Punkte 743

Ohne genau zu wissen, was Sie anstreben, würde ich vorschlagen, MVVM zu verwenden. Was Sie beschrieben haben, ist klassisches MVVM. Sie haben ein Modell, aber Sie haben viele Ansichten, in Ihrem Fall 2, für das gleiche Modell.

Wenn Sie also eine Art MVVM-Framework verwenden, können Sie Dependency Injection nutzen, um verschiedene Ansichten anzuzeigen, je nachdem, in welchem Kontext Sie gerade arbeiten.

Ich bin ein großer Prism-Fan, aber es gibt viele MVVM-Frameworks. Sie könnten sogar weg mit 1 Modell, 1 Ansicht Modell und 2 Ansichten zu bekommen.

0voto

kobusb Punkte 3409

Blick auf FotoSuru ein Beispiel für eine Anwendung, die ihr Layout dynamisch ändert (je nach Fenstergröße)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X