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

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

Как я делаю это?

29
задан Andreas Niedermair 21 December 2015 в 10:16
поделиться

1 ответ

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

<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 и является менее «обходным решением» ИМО.

53
ответ дан 28 November 2019 в 01:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: