2010-01-25 17 views
5

Ich muss eine Desktop-CAD-Anwendung erstellen, die im Wesentlichen eine schöne moderne GUI haben sollte. Ich denke über das Erstellen einer WPF-Anwendung, so dass ich eine reichhaltige Benutzeroberfläche haben kann. Könnte mir jemand ein gut gestaltetes GUI-Framework für Desktop-Anwendungen in WPF vorschlagen? Ich habe ein paar coole GUI in diesem Video http://channel9.msdn.com/posts/Psychlist1972/Pete-at-PDC09-WPF-3d-Awesomeness-with-Tor-and-Robby/ gefunden, aber nicht sicher, die Steuerelemente, die sie in ihrer Anwendung verwendet. Hat jemand eine Idee, welche Kontrollen sie dort benutzt haben?Erstellen einer netten GUI in WPF

Gibt es in WPF ein Eigenschaftsraster? Ich habe versucht, das Raster in Windows Forms zu verwenden. Es ist schwierig, dieses Raster an meine Anforderungen anzupassen. Es zeigt alle Eigenschaften des Objekts direkt von der Basisklasse bis zur abgeleiteten Klasse an.

Antwort

5

Mit WPF ist viel möglich. Aufgrund der Tatsache, dass WPF im Gegensatz zu Windows Forms ähnlich wie HTML gestempelt und gestylt werden kann, finden Sie eine Vielzahl von Aussehen für verschiedene Anwendungen. Tatsächliche Designer können leicht ein Aussehen und Verhalten erzielen, das in Windows Forms nur schwer zu erreichen ist. Natürlich, da es so flexibel ist, wird das Aussehen von hoch gestylten Anwendungen sehr von Anwendung zu Anwendung variieren.

Das gesagt, es gibt einige sehr gute 3rd-Party-Kontrollen. Alle üblichen Verdächtigen haben Kontrollbibliotheken für WPF: Telerik, Infragistics, ComponentOne, Actipro, Devxpress, um nur einige zu nennen. Insbesondere ist Actipro's Property Grid sehr nett. Es gibt auch eine open source one die ich nicht ausgewertet habe, also nicht sprechen kann. WPF kann auch "thematisch" sein, indem vorkompilierte Stile auf Steuerelemente angewendet werden. Es gibt Beispielthemen, die hier gefunden werden: http://wpfthemes.codeplex.com/.

Schließlich werden die Stärken von WPF erst dann vollständig erkannt, wenn Sie lernen, wie die Ansicht, die von WPF gezeichnet und verwaltet wird, und die logische Abstraktion der Ansicht, das so genannte Ansichtsmodell, getrennt werden. Josh Smith hat einen tollen Artikel über dieses Muster, bekannt als Model-View-ViewModel, hier: http://msdn.microsoft.com/en-us/magazine/dd419663.aspx.

4

Ich glaube, Microsoft hat keinen Sinn darin gesehen, ein PropertyGrid-Steuerelement in WPF einzuschließen, weil es so trivial ist, ein eigenes zu erstellen, und wenn sie das Steuerelement erstellen, wäre es schwieriger zu stylen.

Um Ihre eigenen Property zu erstellen, um nur <ListBox> mit einem <ItemsTemplate> verwenden, die ein <DockPanel> enthält ein <TextBlock> nach links für die Eigenschaftsnamen und ein <ContentPresenter> für das Wert-Editor, dann ermöglichen die Gruppierung auf der Category Eigenschaft dockt hat.

Der einzige Code, den Sie schreiben müssen, ist der Code, der das Objekt widerspiegelt und die Liste der Eigenschaften erstellt.

Hier ist eine grobe Vorstellung von dem, was Sie verwenden würden:

DataContext = 
    from pi in object.GetType().GetProperties() 
    select new PropertyGridRow 
    { 
    Name = pi.Name, 

    Category = (
     from attrib in pi.GetCustomAttributes(false).OfType<CategoryAttribute>() 
     select attrib.Category 
    ).FirstOrDefault() ?? "None", 

    Description = (
     from attrib in pi.GetCustomAttributes(false).OfType<DescriptionAttribute>() 
     select attrib.Description 
    ).FirstOrDefault(), 

    Editor = CreateEditor(pi), 

    Object = object, 
    }; 

Die CreateEditor Methode einen entsprechenden Editor für die Eigenschaft mit einer Bindung an den tatsächlichen Eigenschaftswert würde einfach konstruieren.

Im XAML würde die <ListBox.ItemTemplate> so etwas wie diese:

<DataTemplate> 
    <DockPanel> 
    <TextBlock Text="{Binding PropertyName}" Width="200" /> 
    <ContentPresenter DataContext="{Binding Object}" Content="{Binding Editor}" /> 
    </DockPanel> 
</DataTemplate> 

Ich werde Sie in dem Rest der Details füllen lassen.