ListBoxItem styl wpf смена фона

Рейтинг: 0Ответов: 1Опубликовано: 15.05.2023

Пытаюсь поменять фон элемента ListBox. XAML:

<ListBox.ItemContainerStyle>
     <Style TargetType="{x:Type ListBoxItem}">
           <Setter Property="SnapsToDevicePixels" Value="True"/>
           <Setter Property="BorderThickness" Value="0"/>
           <Style.Triggers>
              <Trigger Property="IsMouseOver" Value="True">
                  <Setter Property="Background" Value="AliceBlue"/>
              </Trigger>
           </Style.Triggers>
      </Style>
</ListBox.ItemContainerStyle>

Данный код не работает, НО! Если переключить <Trigger Property="IsMouseOver" Value="True"> на <Trigger Property="IsMouseOver" Value="False"> то фон меняется!

Также было попробовано решение:

<Style TargetType="{x:Type ListBoxItem}" x:Key="ListBoxItemStyle">
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="ListBoxItem">
                <Border x:Name="Part_Border"
                        SnapsToDevicePixels="True">
                    <ContentPresenter/>
                </Border>
                <!--Triggers-->
                <ControlTemplate.Triggers>
                    <Trigger Property="IsSelected" Value="True">
                        <Setter TargetName="Part_Border" Property="Background" Value="AliceBlue"/>
                    </Trigger>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter TargetName="Part_Border" Property="Background" Value="AliceBlue"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

Но оно также не решило проблему! Пример его работы снизу:

Курсор тут(красненький) триггер не работает! Хотя курсор находится на item'е.

введите сюда описание изображения

Курсор на элементе item'а, триггер работает! Он также находится на item'е!

введите сюда описание изображения

В стандартном компоненте ListBox триггер срабатывает по всей поверхности item'a!

Необходимо решение, которое будет реагировать на триггер Item так же как и стандартный ListBox! Я уже не знаю что делать, элементарный вопрос, но в инете ответов нет! Может где то можно достать стиль полностью стандартного ListBox и поменять все как надо?

Ответы

▲ 2

Тебе лучше переписать шаблон ListBoxItem. К сожалению, так, как ты хочешь, не сработает. Прикладываю простой вариант шаблона стиля для ListBoxItem:

<Style TargetType="{x:Type ListBoxItem}" x:Key="ListBoxItemStyle">
    <Setter Property="Background" Value="Transparent"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="ListBoxItem">
                <Border x:Name="Part_Border"
                        SnapsToDevicePixels="True"
                        Background="{TemplateBinding Background}">
                    <ContentPresenter/>
                </Border>
                <!--Triggers-->
                <ControlTemplate.Triggers>
                    <Trigger Property="IsSelected" Value="True">
                        <Setter TargetName="Part_Border" Property="Background" Value="AliceBlue"/>
                    </Trigger>
                    <Trigger Property="IsMouseOver" Value="True">
                        <Setter TargetName="Part_Border" Property="Background" Value="AliceBlue"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>

Ну и в самом ListBox не забудь этот стиль вставить:

<ListBox ItemContainerStyle="{StaticResource ListBoxItemStyle}" />