WPF ListBox, как скрыть рамку и изменить цвет фона выбранного элемента? - PullRequest
28 голосов
/ 28 июля 2010

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

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

1 Ответ

52 голосов
/ 28 июля 2010

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

<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-экземпляры и IMO меньше "обходного пути".

...