问题
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?
回答1:
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".
来源:https://stackoverflow.com/questions/3351904/wpf-listbox-how-to-hide-border-and-change-selected-item-background-color