Я хотел бы скрыть границу ListBox и сделать фон выбранного пункта тем же как отмененные выбор.
Как я делаю это?
Чтобы скрыть границу, используйте
<ListBox BorderThickness="0"/>
. Если вы не хотите иметь выделение, используйте ItemsControl
вместо ListBox
.
Следующий код скрывает границу вокруг ListBox и всегда показывает белый фон на элементе (если он сгенерирован через свойство 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>
Если вы используете ListViewItem-экземпляры, вы должны изменить там фон.
ОБНОВЛЕНИЕ
<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>
Это должно работать также с экземплярами ListBoxItem и является менее «обходным решением» ИМО.