Domanda

Per il layout WPF / Silverlight, è meglio usare una griglia con molte righe e colonne o tonnellate di StackPannels?

È stato utile?

Soluzione

Dovresti usare una griglia se hai bisogno di allinearti in orizzontale e in verticale. Usa StackPanel per creare una riga o una colonna di cose quando quelle cose non hanno bisogno di allinearsi con qualcos'altro.

Tuttavia, non limitarti a queste due opzioni. In particolare, dai un'occhiata a DockPanel. È leggermente più complesso di uno StackPanel, ma il suo markup non è ingombrante come la griglia. Ecco un buon articolo su DockPanel:

Utilizzo di DockPanel in Silverlight 2

Altri suggerimenti

Il contenitore che usi dovrebbe essere basato sul contenuto e non sul fatto che un approccio sia migliore di un altro. Se hai bisogno di cose per allinearle sia in orizzontale che in verticale, dovresti davvero usare una griglia. Ma a parte questo, dipende davvero dal contenuto che intendi visualizzare.

Penso che la griglia sia un'idea migliore. Di solito imposto il layout generale con una griglia e utilizzo alcuni stackpanel qua e là per fare alcune cose specifiche. Ho anche la sensazione che le prestazioni siano migliori con Grids e che le Grid in genere ti offrono maggiore flessibilità.

Non credo che Grid sia un'idea migliore.

ad esempio, se si desidera inserire una riga nel documento di layout griglia esistente (al centro)

la riga esistente è 1,2,3,4, quindi il requisito è inserire una nuova riga tra 1 e 2.

quindi hai dovuto cambiare da 2,3,4 a 3,4,5 (trova tutti i tag una modifica ....)

pensa a se una riga ha 3-5 colonne ... è un lavoro sporco riordinare tutto il digitale. !!!

Preferisco StackPanel perché trovo più semplice apportare modifiche quando si inseriscono nuovi elementi, righe o colonne. Con una griglia devi leggere i numeri di riga e i numeri di colonna per scoprire dove ti trovi. Con StackPanel segui semplicemente l'annidamento, questo è più facile e meno disordinato di una griglia.

Ad esempio, in una pagina XAML, utilizzo un pannello stack orizzontale come una griglia padre, quindi se ho bisogno di una colonna, ho una "verticale" separata stackpanel nidificato. In questo modo uno stackpanel orizzontale diventa una "griglia" e gli StackPanel verticali nidificati diventano le colonne. Trovo più facile leggere e modificare le righe e le colonne in una griglia.

Entrambi hanno forza (Grid / Stackpanel). Il problema con la griglia è la ristrutturazione delle linee. Il problema con Stackpanel è che nessuna struttura di tabella (larghezza fissa delle colonne). Quindi penso che sia una buona soluzione a questi problemi :-)

Stili di definizione

<Page.Resources>
    <Style x:Key="LabelCol1" TargetType="Label">
        <Setter Property="Width" Value="200" />
    </Style>
    <Style x:Key="EditCol2" TargetType="TextBox">
        <Setter Property="Width" Value="250" />
        <Setter Property="TextWrapping" Value="Wrap" />
        <Setter Property="Margin" Value="3" />
    </Style>
    <Style x:Key="ButtonCol3" TargetType="Button">
        <Setter Property="Width" Value="120" />
        <Setter Property="Margin" Value="3" />
        <Setter Property="VerticalContentAlignment" Value="Center" />
        <Setter Property="HorizontalContentAlignment" Value="Center" />
    </Style>
</Page.Resources>

E usando gli stili in Stackpanel

<StackPanel>
    <StackPanel Orientation="Horizontal">
        <Label Style="{StaticResource LabelCol1}" Content="Solution path"  />
        <TextBox Style="{StaticResource EditCol2}" />
        <Button Style="{StaticResource ButtonCol3}" Content="Open..." />
    </StackPanel>
    <StackPanel Orientation="Horizontal">
        <Label Style="{StaticResource LabelCol1}" Content="Solution name"  />
        <TextBox Style="{StaticResource EditCol2}" />
    </StackPanel>
</StackPanel>

Non ho esperienza con un simile layout, ma scommetto che il rendering della griglia è più semplice rispetto a molti pannelli sovrapposti nidificati.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top