ListBox样式触发器不起作用

时间:2015-10-10 23:54:47

标签: c# wpf xaml listbox datatemplate

我有一个动态ListBox,其中包含来自xml(foreach)的项目并且正在运行,但我想通过IsSelected&的触发器更改背景样式。 IsMouseOver但背景样式似乎不起作用,因为触发器只是呈现默认的蓝色系统颜色,而forground颜色设置有效。

<ListBox.ItemContainerStyle>
  <Style TargetType="ListBoxItem">
    <Setter Property="VerticalContentAlignment" Value="Center" />
     <Style.Triggers>

      <!-- Works! -->
      <Trigger Property="ItemsControl.AlternationIndex" Value="0">
       <Setter Property="Background" Value="Transparent"></Setter>
       <Setter Property="BorderBrush" Value="Transparent"></Setter>
       <Setter Property="BorderThickness" Value="0,0,0,0"></Setter>
      </Trigger>

      <!-- Works! -->
      <Trigger Property="ItemsControl.AlternationIndex" Value="1">
       <Setter Property="Background" Value="Transparent"></Setter>
      </Trigger>

      <!-- Does Not Work -->
      <Trigger Property="IsSelected" Value="True" >
       <Setter Property="FontWeight" Value="Bold" />
       <Setter Property="Background" Value="#000000" />
       <Setter Property="Foreground" Value="Black" />
      </Trigger>

      <!-- Does Not Work -->
      <Trigger Property="IsMouseOver" Value="True" >
       <Setter Property="FontWeight" Value="Bold" />
       <Setter Property="Background" Value="#000000" />
       <Setter Property="Foreground" Value="Black" />
      </Trigger>
     </Style.Triggers>

    <Style.Resources>
      <SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="#000000"/>
    </Style.Resources>
  </Style>
</ListBox.ItemContainerStyle>

1 个答案:

答案 0 :(得分:2)

如果从Visual Studio生成的样式开始然后修改它会更容易:

        <ListBox x:Name="listBox" Margin="0">
        <ListBox.ItemContainerStyle>
            <Style TargetType="{x:Type ListBoxItem}">
                <Style.Resources>
                    <SolidColorBrush x:Key="Item.MouseOver.Background" Color="Yellow"/>
                    <SolidColorBrush x:Key="Item.MouseOver.Border" Color="Red"/>
                    <SolidColorBrush x:Key="Item.MouseOver.Foreground" Color="Blue"/>
                    <SolidColorBrush x:Key="Item.SelectedInactive.Background" Color="#3DDADADA"/>
                    <SolidColorBrush x:Key="Item.SelectedInactive.Border" Color="#FFDADADA"/>
                    <SolidColorBrush x:Key="Item.SelectedActive.Background" Color="LightGreen"/>
                    <SolidColorBrush x:Key="Item.SelectedActive.Border" Color="DarkGreen"/>
                </Style.Resources>
                <Setter Property="SnapsToDevicePixels" Value="True"/>
                <Setter Property="Padding" Value="4,1"/>
                <Setter Property="HorizontalContentAlignment" Value="{Binding HorizontalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"/>
                <Setter Property="VerticalContentAlignment" Value="{Binding VerticalContentAlignment, RelativeSource={RelativeSource AncestorType={x:Type ItemsControl}}}"/>
                <Setter Property="Background" Value="Transparent"/>
                <Setter Property="BorderBrush" Value="Transparent"/>
                <Setter Property="BorderThickness" Value="1"/>
                <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}"/>
                                    <Setter Property="Foreground" Value="Blue"/>
                                    <Setter Property="FontWeight" Value="Bold"></Setter>
                                </MultiTrigger>
                                <MultiTrigger>
                                    <MultiTrigger.Conditions>
                                        <Condition Property="Selector.IsSelectionActive" Value="False"/>
                                        <Condition Property="IsSelected" Value="True"/>
                                    </MultiTrigger.Conditions>
                                    <Setter Property="Background" TargetName="Bd" Value="{StaticResource Item.SelectedInactive.Background}"/>
                                    <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="Background" TargetName="Bd" Value="{StaticResource Item.SelectedActive.Background}"/>
                                    <Setter Property="BorderBrush" TargetName="Bd" Value="{StaticResource Item.SelectedActive.Border}"/>
                                    <Setter Property="Foreground" Value="Red"/>
                                    <Setter Property="FontWeight" Value="Bold"></Setter>
                                </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>
        </ListBox.ItemContainerStyle>
    </ListBox>

enter image description here