@Dima231

Почему не меняется свойство Background в ListViewItem?

Здравствуйте! В WPF в ListView сделал триггер, чтобы менялся цвет при установке свойства IsMouseOver. Но цвет фона и границы не меняется. Срабатывает только свойство BorderThickness.
<ListView>
            <ListView.ItemContainerStyle>
                <Style TargetType="{x:Type ListViewItem}">
                    <Setter Property="Background" Value="Red"/>
                    <Style.Triggers>
                        <Trigger Property="IsMouseOver" Value="True">
                            <Setter Property="Background" Value="Green" />
                            <Setter Property="BorderBrush" Value="#D80BFC" />
                            <Setter Property="BorderThickness" Value="3" />
                        </Trigger>                    
                </Style.Triggers>
                </Style>
            </ListView.ItemContainerStyle>
            <ListViewItem>
                <TextBlock Text="Item 1"></TextBlock>
            </ListViewItem>
        <ListViewItem>
            <TextBlock Text="Item 2"></TextBlock>
        </ListViewItem>
    </ListView>

5fabdea656d2a728897160.jpeg
На картинке у пункта Item 2 состояние IsMouseOver = True. Поменялась только ширина границы, а цвет остался по умолчанию. Почему так получается?
  • Вопрос задан
  • 105 просмотров
Решения вопроса 1
Надо бодяжить ControlTemplate. Не знаю, почему. Но напрямую это либо не работает, либо работает не так, как кажется.
Дам вам свой укороченный пример:
<Style TargetType="ListViewItem">
    <Setter Property="SnapsToDevicePixels" Value="true" />
    <Setter Property="OverridesDefaultStyle" Value="true" />
    <Setter Property="local:Properties.IsStatus" Value="{Binding IsStatus, Mode=OneWay}" />
    <Setter Property="local:Properties.IsConnection" Value="{Binding IsConnection, Mode=OneWay}" />
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ListViewItem}">
                <Border
                    x:Name="Border"
                    Background="{TemplateBinding Background}"
                    BorderBrush="{TemplateBinding BorderBrush}">
                    <ContentPresenter
                        x:Name="Content"
                        Margin="0,0,0,0"
                        TextBlock.Foreground="{TemplateBinding Foreground}"
                        HorizontalAlignment="Stretch"
                        VerticalAlignment="Stretch" />
                </Border>
            </ControlTemplate>
        </Setter.Value>
    </Setter>

    <Style.Triggers>

        <MultiTrigger>
            <MultiTrigger.Conditions>
                <Condition Property="local:Properties.IsStatus" Value="0" />
                <Condition Property="local:Properties.IsConnection" Value="True" />
            </MultiTrigger.Conditions>
            <MultiTrigger.Setters>
                <!--  Красный  -->
                <Setter Property="Background" Value="#FFFFCDD2" />
                <Setter Property="Foreground" Value="#FFB71C1C" />
                <Setter Property="BorderBrush" Value="#00D32F2F" />
            </MultiTrigger.Setters>
        </MultiTrigger>

        <MultiTrigger>
            <MultiTrigger.Conditions>
                <Condition Property="local:Properties.IsStatus" Value="9" />
                <Condition Property="local:Properties.IsConnection" Value="True" />
            </MultiTrigger.Conditions>
            <MultiTrigger.Setters>
                <!--  Серый  -->
                <Setter Property="Background" Value="#FFF5F5F5" />
                <Setter Property="Foreground" Value="#FF212121" />
                <Setter Property="BorderBrush" Value="#00616161" />
            </MultiTrigger.Setters>
        </MultiTrigger>

        <Trigger Property="IsSelected" Value="True">
            <Setter Property="Background" Value="#FFFFE0B2" />
            <Setter Property="Foreground" Value="#FFE65100" />
        </Trigger>

        <MultiTrigger>
            <MultiTrigger.Conditions>
                <Condition Property="IsSelected" Value="False" />
                <Condition Property="local:Properties.IsConnection" Value="False" />
            </MultiTrigger.Conditions>
            <MultiTrigger.Setters>
                <Setter Property="Background" Value="#FFFFFFFF" />
                <Setter Property="Foreground" Value="#FF000000" />
                <Setter Property="BorderBrush" Value="#00000000" />
            </MultiTrigger.Setters>
        </MultiTrigger>

        <Trigger Property="IsMouseOver" Value="True">
            <Setter Property="Background" Value="#FFE8EAF6" />
            <Setter Property="Foreground" Value="#FF1A237E" />
        </Trigger>
    </Style.Triggers>
</Style>
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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