Измените цвет фона для выбранного объекта ListBox

Это - мой XAML до сих пор.

    <ScrollViewer Grid.Column="1" Grid.RowSpan="2">

        <ListBox   Background="Black" ItemsSource="{Binding Path=ActiveLog}" >
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <Grid Background="Black">
                        <Grid.ColumnDefinitions>
                            <ColumnDefinition Width="200"></ColumnDefinition>
                            <ColumnDefinition Width="*"></ColumnDefinition>
                        </Grid.ColumnDefinitions>
                        <Grid.RowDefinitions>
                            <RowDefinition></RowDefinition>
                            <RowDefinition></RowDefinition>
                        </Grid.RowDefinitions>
                        <TextBlock Grid.Column="0" Grid.Row="0" Foreground="White">
                            <TextBlock >Date:</TextBlock>
                            <TextBlock  Text="{Binding Path=LogDate}"/>
                        </TextBlock>
                        <TextBlock Grid.Column="1" Grid.Row="0" Foreground="White">
                            <TextBlock >Severity:</TextBlock>
                            <TextBlock  Text="{Binding Path=Severity}"/>
                        </TextBlock>
                        <TextBlock Grid.Column="0" Grid.ColumnSpan="2" Grid.Row="1" Foreground="LightGray" Text="{Binding Path=Message}"></TextBlock>
                    </Grid>
                </DataTemplate>
            </ListBox.ItemTemplate>
            <ListBox.Template>
                <ControlTemplate>
                    <StackPanel Background="Black" IsItemsHost="True" >
                    </StackPanel>
                </ControlTemplate>
            </ListBox.Template>

        </ListBox>
    </ScrollViewer>

Единственная проблема состоит в том, что выбранный пункт имеет синее поле направо. Я предполагаю, что существует способ изменить цвет выделения, но я не могу найти его.

60
задан svick 7 December 2012 в 16:09
поделиться

2 ответа

Вам нужно использовать listbox.itemcontainerStyle .

listbox.itemtemplate Указывает, как отображаться содержимое элемента. Но WPF до сих пор обернут каждый элемент в управлении ListBoxItem, который по умолчанию получает свой фон на систему выделить цвет, если он выбран. Вы не можете остановить WPF, создавая элементы управления ListBoxItem, но вы можете стильнуть их - в вашем случае, чтобы установить фон всегда прозрачным или черным или что-то еще - и сделать это, вы используете ItemContainerStyle.

Ответ Jufo показывает одну возможную реализацию, «угнатим» системного фонового кисточка в контексте стиля элемента; Другой, возможно, более идиоматическая техника - использовать установку для фонового свойства.

47
ответ дан 24 November 2019 в 17:27
поделиться
<UserControl.Resources>
    <Style x:Key="myLBStyle" TargetType="{x:Type ListBoxItem}">
        <Style.Resources>
            <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}"
                             Color="Transparent"/>
        </Style.Resources>
    </Style>
</UserControl.Resources> 

И

<ListBox ItemsSource="{Binding Path=FirstNames}"
         ItemContainerStyle="{StaticResource myLBStyle}">  

Вы просто переопределите стиль ListBoxItem (см.: Targettype - это listboxitem)

73
ответ дан 24 November 2019 в 17:27
поделиться
Другие вопросы по тегам:

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