2009-04-03 13 views
2

WPF Noob Frage:WPF "Skinning" ie Ersetzen eines Fensterlayouts durch ein völlig anderes

Kann WPF-Anwendungen ihr Aussehen zur Laufzeit ändern können? Ich verstehe, durch Stile, dass man das Aussehen von Steuerelementen und UI-Elementen ändern kann, aber ich stellte mir eher zwei Anwendungen vor: eine "Editor" -Anwendung und eine "Spiel" -Anwendung, die beide im Wesentlichen denselben Code verwenden aber mit einem völlig anderen UI-Layout (letzteres mit weniger Schaltflächen, einfacheren Steuerelementen, Menüelementen usw.). Das Layout der Benutzeroberfläche "Spiel" könnte von einem Künstler entworfen werden, im Allgemeinen jemand, der keinen Zugriff auf den zugrunde liegenden Code hat.

Wie gehe ich so etwas machen? Ich brauche nur einen Ausgangspunkt.

Danke!

Antwort

1

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

Ohne die vollständigen Details Ihrer App zu kennen, klingt es so, als könnten Sie zwei verschiedene Sätze von UI-Steuerelementen für Redakteure und eines für Gamer erstellen und beide die gleichen logischen Logikklassen verwenden.

Um auszuwählen, in welchem ​​Modus Ihre App zur Laufzeit ausgeführt werden soll, müssen Sie entscheiden, welchen Benutzertyp Sie hinzufügen und das Steuerelement des Editors oder des Gamers auf den Hauptlayout-Container entsprechend 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 eine Vielzahl von anderen Möglichkeiten, wie Sie es auch tun könnten.

0

Blick auf PhotoSuru ein Beispiel für eine Anwendung, die es dynamisch ist das Layout (entsprechend der Fenstergröße) ändern

1

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

Also, wenn Sie irgendeine Art von MVVM Rahmen verwenden, können Sie Dependency Injection verwenden verschiedene Ansichten angezeigt werden, je nach welchem ​​Zusammenhang Sie ausgeführt werden.

Ich bin ein großer Prism-Fan, aber es gibt viele MVVM-Frameworks zur Verfügung. Sie könnten sogar mit 1 Modell, 1 Ansichtsmodell und 2 Ansichten davonkommen.

Verwandte Themen