Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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?

like image 625
deerchao Avatar asked Jul 28 '10 10:07

deerchao


1 Answers

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

like image 115
HCL Avatar answered Sep 30 '22 21:09

HCL