/ / Comment définir l'espace autour des cellules dans WPF ListView + GridView? - wpf, xaml

Comment définir un espace autour des cellules dans WPF ListView + GridView? - wpf, xaml

J'essaye de remplacer DataGrid par ListView +GridView. Malheureusement, il semble complètement différent et je ne comprends pas assez les styles pour faire tous les changements. J'ai compris l'en-tête de colonne, mais les styles pour les cellules sont plus difficiles à implémenter.

ÉDITER: CETTE QUESTION EST ESSENTIELLEMENT MÊME QUE "COMMENT PUIS-JE OBTENIR DES GRILLES VERTICALES?" PARCE QUE JE PEUX OBTENIR DE L'ESPACE ENTRE LES RANGÉES EN UTILISANT LA MARGE. IL SEMBLE DONC QUE MICROSOFT A OUBLIÉ LA FONCTION LA PLUS IMPORTANTE DE LEUR GRIDVIEW: CELLE QUI EN FAIT UNE GRILLE.

<Window x:Class="MyApplication.UI.Dialogs.SomeWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525" Background="{DynamicResource Theme.TreeView.Background}">
<Window.Resources>
<Style TargetType="{x:Type GridViewColumnHeader}" >
<Setter Property="FontWeight" Value="{StaticResource Theme.DataGrid.ColumnHeader.FontWeight}"/>
<Setter Property="BorderBrush" Value="Transparent"/>
<Setter Property="Padding" Value="{StaticResource Theme.DataGrid.Cell.Padding}"/>
<Setter Property="Background" Value="{StaticResource Theme.DataGrid.ColumnHeader.Background}"/>
<Setter Property="Foreground" Value="{StaticResource Theme.DataGrid.ColumnHeader.Foreground}"/>
</Style>
<Style TargetType="{x:Type ListView}" >
<Setter Property="BorderThickness" Value="{DynamicResource Theme.DataGrid.BorderThickness}"/>
</Style>
<Style TargetType="{x:Type ListViewItem}" >
<Setter Property="Background" Value="White" />
<Setter Property="Foreground" Value="{DynamicResource Theme.DataGrid.Row.Foreground}" />
<Setter Property="VerticalAlignment" Value="Stretch"></Setter>
<Setter Property="HorizontalAlignment" Value="Stretch"></Setter>
<Setter Property="VerticalContentAlignment" Value="Stretch"></Setter>
<Setter Property="HorizontalContentAlignment" Value="Stretch"></Setter>
<Setter Property="Padding" Value="{DynamicResource Theme.DataGrid.Cell.Padding}"></Setter>
</Style>
</Window.Resources>
<StackPanel>
<ListView Margin="10" ItemsSource="{Binding Users}">
<ListView.View>
<GridView >
<GridViewColumn Header="Name" DisplayMemberBinding="{Binding Name}" />
<GridViewColumn Header="Age"  DisplayMemberBinding="{Binding Age}" />
<GridViewColumn Header="Mail"  DisplayMemberBinding="{Binding Mail}" />
<GridViewColumn Header="Group"  DisplayMemberBinding="{Binding Group}" />
</GridView>
</ListView.View>
</ListView>
</StackPanel>
</Window>

Alors, comment définir un espace autour de chaque cellule (par exemple 2 de chaque côté)?

Réponses:

2 pour la réponse № 1

Malheureusement, dès que vous utilisez DisplayMemberBinding, tout le reste (y compris CellStyles) est complètement ignoré. Ce que vous pouvez (et devez probablement) faire est de définir manuellement toutes vos colonnes, par exemple:

<GridViewColumn Header="Name">
<GridViewColumn.CellTemplate>
<DataTemplate>
<TextBlock Margin="4" Text="{Binding Name}"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>

Détails sur le style / la priorité du modèle sur MSDN:

Les propriétés suivantes sont toutes utilisées pour définir le contenu et le style d'une cellule de colonne et sont répertoriées ici dans leur ordre de priorité, du plus élevé au plus bas:

  • DisplayMemberBinding
  • CellTemplate
  • CellTemplateSelector

Peut théoriquement styliser chaque élément de liste comme ceci:

<ListView.ItemContainerStyle>
<Style TargetType="ListViewItem">
<Setter Property="Margin" Value="50,0"></Setter>
</Style>
</ListView.ItemContainerStyle>

Mais malheureusement, cela désalignerait simplement toutes les colonnes, donc cette approche n'est pas vraiment utile pour Margin / Padding.

Colonnes mal alignées