65 votes

Désactiver la bordure de cellule actuelle DataGrid en mode de sélection FullRow

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?

117voto

Fredrik Hedblad Points 42772

Vous pouvez définir les BorderThickness pour DataGridCell sur 0

 <DataGrid ...
          SelectionUnit="FullRow">
    <DataGrid.CellStyle>
        <Style TargetType="DataGridCell">
            <Setter Property="BorderThickness" Value="0"/>
        </Style>
    </DataGrid.CellStyle>
    <!-- ... -->
</DataGrid>
 

6voto

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>

0voto

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>
 

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