deerchao
deerchao

Reputation: 10534

WPF ListBox, how to hide border and change selected item background color?

I'd like to hide the border of ListBox, and make background of selected item the same as unselected ones.

How do I do this?

Upvotes: 33

Views: 39111

Answers (1)

HCL
HCL

Reputation: 36765

To hide the border, use

<ListBox BorderThickness="0"/>

If you don't want to have a selection, use an ItemsControl instead of the ListBox.

The following code hides the border around the ListBox and does always show a white background on the item (if its generated through the ItemsSource-property).

<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>

If you use ListViewItem-instances, you must change the background there.

UPDATE

In the meantime I have found a solution that is IMO much more elegant:

<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>

This should work also with ListBoxItem-instances and is IMO less "work-around".

Upvotes: 60

Related Questions