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?
To hide the border, use
<ListBox BorderThickness="0"/>
If you don't want to have a selection, use an ItemsControl instead of the ListBox.
ItemsControl
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).
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>
If you use ListViewItem-instances, you must change the background there.
UPDATE
<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".
To hide the border, use
If you don't want to have a selection, use an
ItemsControlinstead of theListBox.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).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:
This should work also with ListBoxItem-instances and is IMO less "work-around".