2 votes

Meilleures pratiques de la grille wpf

J'ai une grille qui contient de nombreuses étiquettes, boîtes combo et zones de texte. Je place à la fois une étiquette et une boîte combo dans chaque cellule.

Quelle est la meilleure pratique ? 1. Placez la boîte combo et l'étiquette dans un panneau de pile, puis placez-la dans une cellule. 2. Placer simplement les deux contrôles directement dans une cellule de la grille

Quels sont les avantages et les inconvénients de ces deux approches ?

Merci.

3voto

Ed Plunkett Points 1579

L'inconvénient de mettre les deux contrôles ensemble dans la même cellule est que le second sera superposé au premier (ce que vous auriez remarqué si vous l'aviez essayé), et la seule façon d'y remédier est de leur donner des marges bizarres ou de les mettre tous les deux dans une cellule de type StackPanel c'est pourquoi tout le monde les met dans un StackPanel .

Je suggère ceci : Définissez un style comme indiqué ci-dessous, et mettez-le dans une chose globale incluse dans App.xaml (ou en App.xaml lui-même, si vous êtes dans un état d'esprit pirate) :

<Style x:Key="FieldStyle" TargetType="HeaderedContentControl">
    <Setter Property="Margin" Value="8,3" />
    <Setter Property="MinWidth" Value="300" />
    <Setter Property="IsTabStop" Value="False" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="HeaderedContentControl">
                <StackPanel Orientation="Vertical">
                    <Label 
                        FontWeight="Bold" 
                        Content="{TemplateBinding Header}" 
                        />
                    <ContentPresenter 
                        Margin="8,0,0,0"
                        />
                </StackPanel>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

Et utilise-le comme ça :

<HeaderedContentControl 
    Header="Contact Name"
    Grid.Row="0"
    Grid.Column="0"
    Style="{StaticResource FieldStyle}" 
    >
    <TextBox Text="{Binding ContactName}" />
</HeaderedContentControl>

<HeaderedContentControl 
    Header="Contact Phone"
    Grid.Row="1"
    Grid.Column="0"
    Style="{StaticResource FieldStyle}" 
    >
    <TextBox Text="{Binding ContactPhone}" />
</HeaderedContentControl>

Cela vous permet de modifier facilement le formatage de tous vos couples étiquette/contrôle. D'habitude, je me contente d'insérer ces éléments dans un fichier de type StackPanel o WrapPanel moi-même, mais si un Grid a un sens pour votre mise en page, alors n'hésitez pas à le faire.

Le modèle dans ce style pourrait et devrait être TemplateBinding beaucoup plus de choses que ça ne l'est, mais j'en ai eu marre de taper et il y a tout ce que je vais vraiment utiliser.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X