2010-03-28 1 views
12

Ich mache eine Benutzeroberfläche in WPF, ich habe eine Reihe von funktionalen Bereichen und ich verwende ein Grid, um es zu organisieren.Was ist besser in WPF für UI-Layout, mit einem Raster oder verschachtelte Grids

Jetzt ist das Grid, das ich möchte, nicht einheitlich, wie in einigen Funktionsbereich über mehrere Zellen im Grid erstreckt. Ich habe mich gefragt, was die beste Vorgehensweise ist, um das zu lösen. Sollte ich ein Gitter erstellen und dann für jeden Funktionsbereich festlegen, dass es sich über mehrere Zellen erstreckt, oder sollte ich es in mehrere verschachtelte Gitter aufteilen.

In diesem Bild ist das linke Panel (durch den grauen Balken getrennt) was ich will. Das mittlere Feld zeigt ein Raster, in dem die blauen Linien von einem Funktionsbereich überlagert sind. Das rechteste Feld zeigt, wie ich es mit verschachtelten Gittern machen könnte. Sie können sehen, dass das grüne Gitter eine horizontale Teilung hat. In der unteren Zelle befindet sich das gelbe Gitter mit einer vertikalen Teilung. In der linken Zelle befindet sich das rote Gitter mit einer horizontalen Teilung. Grids http://www.freeimagehosting.net/uploads/08f2711bae.jpg

Ich habe mich gerade gefragt, was ist die beste Praxis, das mittlere oder das rechte Panel.

UPDATE: Nur zur Klarstellung, eine 'Code orientierte' Beispiel:

Die Mitteltafel

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="25" /> 
     <RowDefinition Height="*" /> 
     <RowDefinition Height="*" /> 
    </Grid.RowDefinitions> 

    <Grid.ColumnDefinitions> 
     <ColumnDefinition Width="200" /> 
     <ColumnDefinition Width="*" /> 
    </Grid.ColumnDefinitions> 

    <Menu   Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="2" /> 
    <uc:Info  Grid.Row="1" Grid.Column="0" /> 
    <uc:Control Grid.Row="2" Grid.Column="0" /> 
    <uc:Simulation Grid.Row="1" Grid.Column="1" Grid.RowSpan="2" /> 
</Grid> 

Die Rechts:

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="25" /> 
     <RowDefinition Height="*" /> 
    </Grid.RowDefinitions> 

    <Menu Grid.Row="0"/> 

    <Grid Grid.Row="1"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="200" /> 
      <ColumnDefinition Width="*" /> 
     </Grid.ColumnDefinitions> 

     <Grid Grid.Column="0"> 
      <Grid.RowDefinitions> 
       <RowDefinition Height="*" /> 
       <RowDefinition Height="*" /> 
      </Grid.RowDefinitions> 

      <uc:Info Grid.Row="0" /> 
      <uc:Control Grid.Row="1" /> 
     </Grid> 

     <uc:Simulation Grid.Column="1" /> 
    </Grid> 
</Grid> 

Update: Ich muss zugeben, dass Jetzt, wo ich den Code für beide Ansätze geschrieben habe, sieht die "span" -Lösung viel besser aus.

Antwort

3

Ich würde persönlich mit Ihrem mittleren Layout mit einem einzigen Raster mit Spalten- und Zeilenspannen gehen, um das Gesamtlayout der Benutzeroberfläche zu strukturieren, dann ein Panel in jedem dieser Abschnitte, um die tatsächlichen Steuerelemente (und mögliche weitere detaillierte Layout enthalten)).

1

Ich fürchte, ich bin nicht in der Lage, Ihre Lösungen mit der Farbe in den verschiedenen Raster und Sub-Grids zu unterscheiden.

Was ich raten kann, ist ein Usercontrol für jeden Funktionsbereich zu schaffen, haben dann ein Raster, diese Bereiche zu arrangieren.

Jedes UserControl kann dann sein eigenes Layout erstellen (mit einem anderen Raster oder einem einfacheren StackPanel oder was auch immer) und ist verantwortlich für die Anzeige eines Datenteilsatzes/handle Benutzerereignisse in seinem eigenen Bereich.

Das äußere Gitter ist dann ein Arbiter für Dinge, die mehr als einen Bereich umfassen (z Ereignis zwischen Bereichen Weiterleitung).

2

Ich würde empfehlen, ein Hauptgitter zu erstellen, das in Funktionsbereiche unterteilt ist, dann separate Raster/Stackpanels/etc in diesen Bereichen zu erstellen. Sie kennen vielleicht nicht die Anforderungen für jeden Funktionsbereich, Sie können also ihre Elemente frei anordnen und zwischen den Layouts wechseln. Wenn Sie alles in ein Raster mit Spannen und/oder Reihen setzen, erhalten Sie ein "schwer zu verwaltendes" Layout.

1

Ehrlich gesagt würde ich für eine Docking-Panel oder so für Top-Level-Zusammensetzung gehen, und Raster für niedrige Ebene

Verwandte Themen