WPF ListBox, comment masquer la bordure et changer la couleur de fond de l'article sélectionné?

j'aimerais cacher la bordure de ListBox, et faire en sorte que l'arrière-plan de l'élément sélectionné soit le même que celui de l'élément non sélectionné.

comment je fais ça?

27
demandé sur Andreas Niedermair 2010-07-28 14:19:29

1 réponses

pour masquer la frontière, utilisez

<ListBox BorderThickness="0"/>

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

le code suivant cache la bordure autour de la ListBox et affiche toujours un fond blanc sur l'élément (si celui-ci est généré par le ItemsSource-propriété).

<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 changer l'arrière-plan.

UPDATE

En attendant, j'ai j'ai trouvé une solution 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 fonctionner aussi avec ListBoxItem-instances et est IMO moins "work-around".

51
répondu HCL 2010-08-02 11:48:35