2010-01-25 2 views
5

Ho bisogno di creare un'applicazione CAD desktop che essenzialmente dovrebbe avere una bella GUI moderna. Sto pensando di creare un'applicazione WPF in modo che possa avere una ricca interfaccia utente. Qualcuno potrebbe suggerirmi un framework per GUI per applicazioni desktop ben progettato in WPF, per favore? Ho trovato una bella interfaccia grafica in questo video http://channel9.msdn.com/posts/Psychlist1972/Pete-at-PDC09-WPF-3d-Awesomeness-with-Tor-and-Robby/ ma non sono sicuro dei controlli che hanno usato nella loro applicazione. Qualcuno ha un'idea di quali controlli ha usato lì?creazione di una bella interfaccia grafica in WPF

Esiste un controllo di rete di proprietà in WPF? Ho provato a utilizzare la griglia in Windows Form. La personalizzazione di questa griglia in base alle mie esigenze sembra essere difficile. Mostra tutte le proprietà dell'oggetto direttamente dalla classe base alla più derivata.

risposta

5

Con WPF, è possibile molto. Troverai una vasta gamma di look per varie applicazioni, poiché, a differenza di Windows Form, WPF può essere rappresentato da modelli e stili simili all'HTML. I progettisti reali possono facilmente dare un aspetto che è molto difficile da realizzare in Windows Form. Naturalmente, dal momento che è così flessibile, l'aspetto delle applicazioni altamente stilizzate varia molto da un'applicazione all'altra.

Detto questo, ci sono alcuni ottimi controlli di terze parti. Tutti i soliti sospetti dispongono di librerie di controllo per WPF: Telerik, Infragistics, ComponentOne, Actipro, Devxpress, solo per citarne alcuni. Nello specifico, Actipro's Property Grid è molto bello. C'è anche uno open source one che non ho valutato, quindi non posso parlare. WPF può anche essere "a tema" applicando gli stili precompilati ai controlli. Sono disponibili temi di esempio: http://wpfthemes.codeplex.com/.

Infine, i punti di forza di WPF non vengono pienamente realizzati finché non si impara a separare la vista che viene disegnata e gestita da WPF e l'astrazione logica della vista, chiamata modello di visualizzazione. Josh Smith ha un grande articolo su questo modello, noto come Model-View-ViewModel, qui: http://msdn.microsoft.com/en-us/magazine/dd419663.aspx.

4

Penso che Microsoft non abbia visto alcun punto di includere un controllo PropertyGrid in WPF perché è così banale da crearne di propri, e se hanno creato il controllo sarebbe stato più difficile da stile.

Per creare la tua PropertyGrid, basta usare un <ListBox> con una <ItemsTemplate> che ha un <DockPanel> contenente un <TextBlock> ancorata a sinistra per il nome della proprietà e un <ContentPresenter> per l'editor di valore, quindi attivare il raggruppamento sulla proprietà Category.

L'unico codice che è necessario scrivere è il codice che si riflette sull'oggetto e crea l'elenco di proprietà.

Ecco una vaga idea di quello che si potrebbe usare:

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, 
    }; 

Il metodo CreateEditor sarebbe semplicemente costruire un editor appropriato per la proprietà con un legame al valore della proprietà reale.

In XAML, il <ListBox.ItemTemplate> sarebbe qualcosa di simile:

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

vi svelo si compila il resto dei dettagli.