Подтвердить что ты не робот

WPF ListBox, как скрыть границу и изменить выбранный цвет фона элемента?

Я хотел бы скрыть границу ListBox и сделать фон выбранного элемента таким же, как невыделенные.

Как это сделать?

4b9b3361

Ответ 1

Чтобы скрыть границу, используйте

<ListBox BorderThickness="0"/>

Если вы не хотите иметь выделение, используйте ItemsControl вместо ListBox.

Следующий код скрывает границу вокруг ListBox и всегда показывает белый фон на элементе (если он сгенерирован через 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>

Если вы используете экземпляры ListViewItem, вы должны изменить фон там.

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>

Это должно работать также с экземплярами ListBoxItem и меньше, чем "IMO".