J'utilise un DataGrid en mode de sélection de ligne (c'est-à-dire SelectionUnit="FullRow"
). Je souhaite simplement supprimer la bordure placée autour de la cellule en cours lorsque l'utilisateur sélectionne une ligne afin d'obtenir une sélection de ligne complète (et aucune sélection au niveau de la cellule). La notion selon laquelle la grille conserve la cellule actuelle ne me dérange pas, je souhaite simplement supprimer cette saturée bordure de cellule actuelle, peut-être en modifiant le style de la cellule actuelle. Quelle est la manière la plus simple de faire ça?
Réponses
Trop de publicités?
marius
Points
31
<Style x:Key="DataGrid" TargetType="DataGrid">
<Setter Property="CellStyle">
<Setter.Value>
<Style TargetType="DataGridCell">
<Setter Property="BorderThickness" Value="0"/>
<Setter Property="Foreground" Value="{Binding Foreground, RelativeSource={RelativeSource TemplatedParent}}" />
<Setter Property="Background" Value="{Binding Background, RelativeSource={RelativeSource TemplatedParent}}" />
</Style>
</Setter.Value>
</Setter>
</Style>
AxdorphCoder
Points
119
Si vous souhaitez afficher une bordure uniquement lorsque la cellule est modifiable et sélectionnée, vous pouvez remplacer le modèle DataGridCell et ajouter un multitrigger lorsque la cellule est IsSelected et non IsReadOnly. Ensuite, aucune bordure ne sera affichée pour les cellules si vous définissez IsReadOnly = true pour la colonne ou DataGrid
<ControlTemplate x:Key="MellowDataGridCellTemplate" TargetType="{x:Type DataGridCell}">
<Grid>
<ContentPresenter VerticalAlignment="Center" />
<Rectangle Name="FocusVisual" Stroke="White" StrokeThickness="1" Fill="Transparent" HorizontalAlignment="Stretch"
VerticalAlignment="Stretch" IsHitTestVisible="false" Opacity="0" />
</Grid>
<ControlTemplate.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="IsReadOnly" Value="False" />
<Condition Property="IsSelected" Value="True" />
</MultiTrigger.Conditions>
<Setter TargetName="FocusVisual" Property="Opacity" Value="1"/>
</MultiTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
Utilisez le modèle dans un style
<Style TargetType="{x:Type DataGridCell}" x:Key="MellowGridDataGridCell">
<Setter Property="Template" Value="{StaticResource MellowDataGridCellTemplate}" />
</Style>
Et utiliser le style
<DataGrid CellStyle={StaticResource MellowGridDataGridCell >
...
</DataGrid>