web-dev-qa-db-fra.com

WPF ListBox, Comment masquer la bordure et modifier l'élément sélectionné Couleur d'arrière-plan?

Je souhaite cacher la bordure de la liste de liste et faire fond d'un élément sélectionné identique à celui des personnes non sélectionnées.

Comment puis-je faire cela?

31
deerchao

Pour cacher la bordure, utilisez

<ListBox BorderThickness="0"/>

Si vous ne voulez pas avoir de sélection, utilisez un ItemsControl au lieu du ListBox.

Le code suivant masque la bordure autour de la liste de liste et affiche toujours un fond blanc sur l'élément (si son généré via la propriété ItemsSource-).

<ListBox BorderThickness="0" HorizontalContentAlignment="Stretch">
    <ListBox.ItemContainerStyle>
        <Style TargetType="ListBoxItem">
              <Setter Property="Padding" Value="0"/>
        </Style>
    </ListBox.ItemContainerStyle>
    <ListBox.ItemTemplate>
        <DataTemplate>
            <Grid Background="White">
                <ContentPresenter Content="{Binding}"/>
            </Grid>
        </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

Si vous utilisez ListViewItem-Instances, vous devez modifier l'arrière-plan.

MISE À JOUR

En attendant, j'ai trouvé une solution imo beaucoup plus élégante:

<ListBox BorderThickness="0" HorizontalContentAlignment="Stretch"  >
    <ListBox.Resources>
        <Style TargetType="ListBoxItem">
            <Style.Resources>
                <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Transparent"/>
                <SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="Transparent"/>
                <SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Black"/>
            </Style.Resources>
        </Style>
    </ListBox.Resources>                
</ListBox>

Cela devrait également travailler avec ListboxItem-Instances et IMO Moins de "contour".

53
HCL