web-dev-qa-db-fra.com

Comment définir la bordure de ligne et la couleur d'arrière-plan dans la grille WPF

Comment pouvons-nous définir la couleur de bordure et d'arrière-plan dans le contrôle de grille WPF,
Je crée des lignes et des colonnes de manière dynamique et ajoute ensuite à la grille,
pouvons-nous définir la couleur et la bordure du code derrière?

17
Buzz

La couleur Background peut simplement être définie pour la totalité de Grid en utilisant la propriété Background

<Grid Background="Red" />

Ou, si vous souhaitez le définir pour des cellules individuelles, vous devez ajouter un élément à la cellule dont la propriété Background est définie.

En ce qui concerne les bordures, une Grid contient uniquement la propriété ShowGridLines, qui peut être utilisée pour afficher des lignes pointillées fines qui ne peuvent pas être stylées.

Par MSDN:

Seules les lignes en pointillé sont disponibles car cette propriété est conçue en tant que outil de conception pour déboguer les problèmes d’agencement et n’est pas destiné à être utilisé dans code de qualité de production. Si vous voulez des lignes dans une grille, appelez le style éléments de la grille pour avoir des frontières.

Par conséquent, pour ajouter des bordures à votre grille, vous devez ajouter des éléments Border ou des contrôles contenant une Border aux cellules de la grille, puis styliser ces éléments.

Mais il y a une alternative. Cet article de blog explique comment étendre la classe Grid pour créer une grille personnalisée dotée de propriétés pour les lignes Grid. Je l'ai utilisé avec succès dans le passé lorsque je voulais afficher des lignes de grille, mais que je ne voulais pas remplir chaque cellule avec un objet.

<my:CustomGrid ShowCustomGridLines="True"
               GridLineBrush="Blue"
               GridLineThickness="1">
16
Rachel

Voici un peu de bidouille qui semble bien fonctionner. Si vous placez un élément d’arrière-plan dans les rangées/colonnes avec les éléments que vous y placeriez normalement, il agira comme arrière-plan. Vous aurez juste besoin de vous préoccuper de l'ordre des éléments dans le XAML (les éléments apparaissent dans un ordre Z croissant) ou de définir Panel.Zorder en conséquence.

<Window x:Class="gridBackground.MainWindow"
    xmlns="http://schemas.Microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.Microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition/>
        <RowDefinition/>
        <RowDefinition/>
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition/>
        <ColumnDefinition/>
    </Grid.ColumnDefinitions>
        <Border Background="Red" />
        <Border Grid.Row="2" Grid.Column="1"  Background="Red" />        
        <Border  Grid.Row="1" Background="LightBlue" />       
        <Border Grid.Row="2" Background="Orange" />
        <Border Grid.Row="0" Grid.Column="1" Background="Orange" />
        <TextBlock Grid.ColumnSpan="2" Grid.Row="1" Text="Here is some more text" HorizontalAlignment="Center"  VerticalAlignment="Center"/>
        <TextBlock Grid.ColumnSpan="2" Text="Here is some text" HorizontalAlignment="Center"  VerticalAlignment="Center"/>
        <TextBlock Grid.ColumnSpan="2" Grid.Row="2" Text="Here is even more text" HorizontalAlignment="Center"  VerticalAlignment="Center"/>
    </Grid>
</Window>

Cela ressemble à ceci:

enter image description here

32
Christopher Scott

cela dépend de ce que vous avez l'intention de faire avec cette grille mais je suppose que vous voulez remplir les cellules de la grille avec des contrôles.

Vous devrez définir les propriétés Background et border (Stroke) sur les contrôles, puis encapsuler d’abord chacun de vos contrôles dans une bordure.

Mais bien sûr, si vous voulez la même couleur d’arrière-plan pour chaque cellule, définissez l’arrière-plan de la grille. :)

j'espère avoir bien répondu.

0
Julien
<Border Grid.Row="12" Grid.Column="0" Grid.ColumnSpan="12" Background="#fff" BorderBrush="Blue" BorderThickness="2"/>
0
Cristian Oana