WPF,XAML。 ListBoxItem触发器不影响整个选择?

时间:2017-04-20 14:32:38

标签: wpf xaml

这是我的问题:

<Style x:Key="listbox_minecraft_container_style" TargetType="{x:Type ListBoxItem}">
    <Setter Property="Background" Value="{DynamicResource image_listbox_item_background}"/>
    <Setter Property="Margin" Value="1"/>
    <Setter Property="BorderBrush" Value="#FF8B8B8B"/>
    <Setter Property="BorderThickness" Value="0.4"/>
    <Setter Property="HorizontalContentAlignment" Value="Center"/>
    <Setter Property="Foreground" Value="Black"/>
    <Setter Property="FontSize" Value="18"/>
    <Setter Property="Width" Value="180"/>
    <Setter Property="FontWeight" Value="SemiBold"/>
    <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="True">
            <Setter Property="Foreground" Value="White"/>
        </Trigger>
        <Trigger Property="IsSelected" Value="True">
            <Setter Property="Background" Value="{DynamicResource image_listbox_item_background_fulopacity}"/>
            <Setter Property="FontWeight" Value="Bold"/>
            <Setter Property="Foreground" Value="#FF42A855"/>
        </Trigger>
    </Style.Triggers>
</Style>

如果我现在点击ListBoxItem,它就无法正确设置背景属性。它设置新Foreground和新FontWeight,但不设置Background

这是我ListBox中的MainWindow

<ListBox x:Name="listBox_vanilla_versions"
         Style="{StaticResource listbox_minecraft}" 
         ItemContainerStyle="{StaticResource listbox_minecraft_container_style}" 
         Margin="10,122,484.592,198.5">
    <ListBox.Items>
        <ListBoxItem Content="hi"/>
    </ListBox.Items>
</ListBox>

1 个答案:

答案 0 :(得分:3)

这是因为默认控件模板。你需要覆盖这一个:

<Style x:Key="listbox_minecraft_container_style" TargetType="{x:Type ListBoxItem}">
    <Style.Resources>
        <SolidColorBrush x:Key="Item.MouseOver.Background" Color="#1F26A0DA"/>
        <SolidColorBrush x:Key="Item.MouseOver.Border" Color="#a826A0Da"/>
        <SolidColorBrush x:Key="Item.SelectedInactive.Background" Color="#3DDADADA"/>
        <SolidColorBrush x:Key="Item.SelectedInactive.Border" Color="#FFDADADA"/>
        <SolidColorBrush x:Key="Item.SelectedActive.Background" Color="#3D26A0DA"/>
        <SolidColorBrush x:Key="Item.SelectedActive.Border" Color="#FF26A0DA"/>
    </Style.Resources>
    <Setter Property="Background" Value="{DynamicResource image_listbox_item_background}"/>
    <Setter Property="Margin" Value="1"/>
    <Setter Property="BorderBrush" Value="#FF8B8B8B"/>
    <Setter Property="BorderThickness" Value="0.4"/>
    <Setter Property="HorizontalContentAlignment" Value="Center"/>
    <Setter Property="Foreground" Value="Black"/>
    <Setter Property="FontSize" Value="18"/>
    <Setter Property="Width" Value="180"/>
    <Setter Property="FontWeight" Value="SemiBold"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate TargetType="{x:Type ListBoxItem}">
                <Border x:Name="Bd" BorderBrush="{TemplateBinding BorderBrush}" BorderThickness="{TemplateBinding BorderThickness}" Background="{TemplateBinding Background}" Padding="{TemplateBinding Padding}" SnapsToDevicePixels="true">
                    <ContentPresenter HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="{TemplateBinding VerticalContentAlignment}"/>
                </Border>
                <ControlTemplate.Triggers>
                    <MultiTrigger>
                        <MultiTrigger.Conditions>
                            <Condition Property="IsMouseOver" Value="True"/>
                        </MultiTrigger.Conditions>
                        <Setter Property="Background" TargetName="Bd" Value="{StaticResource Item.MouseOver.Background}"/>
                        <Setter Property="BorderBrush" TargetName="Bd" Value="{StaticResource Item.MouseOver.Border}"/>
                    </MultiTrigger>
                    <MultiTrigger>
                        <MultiTrigger.Conditions>
                            <Condition Property="Selector.IsSelectionActive" Value="False"/>
                            <Condition Property="IsSelected" Value="True"/>
                        </MultiTrigger.Conditions>
                        <Setter Property="BorderBrush" TargetName="Bd" Value="{StaticResource Item.SelectedInactive.Border}"/>
                    </MultiTrigger>
                    <MultiTrigger>
                        <MultiTrigger.Conditions>
                            <Condition Property="Selector.IsSelectionActive" Value="True"/>
                            <Condition Property="IsSelected" Value="True"/>
                        </MultiTrigger.Conditions>
                        <Setter Property="BorderBrush" TargetName="Bd" Value="{StaticResource Item.SelectedActive.Border}"/>
                    </MultiTrigger>
                    <Trigger Property="IsEnabled" Value="False">
                        <Setter Property="TextElement.Foreground" TargetName="Bd" Value="{DynamicResource {x:Static SystemColors.GrayTextBrushKey}}"/>
                    </Trigger>
                </ControlTemplate.Triggers>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
    <Style.Triggers>
        <Trigger Property="IsMouseOver" Value="True">
            <Setter Property="Foreground" Value="White"/>
        </Trigger>
        <Trigger Property="IsSelected" Value="True">
            <Setter Property="Background" Value="{DynamicResource image_listbox_item_background_fulopacity}"/>
            <Setter Property="FontWeight" Value="Bold"/>
            <Setter Property="Foreground" Value="#FF42A855"/>
    </Trigger>
    </Style.Triggers>
</Style>