2017-04-20 64 views
3

这里是我的问题:WPF,XAML。 ListBoxItem触发器不会影响整个选择?

<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,它没有得到background属性设置正确。它设置新的Foreground和新的FontWeight,但不是Background

这是我ListBoxMainWindow

<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

取而代之的是动态资源的...没有,如果你把它设置为'Red'同样发生? – OmegaMan

+0

dis不要改变背景 – DaNeubi

回答

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> 
+0

谢谢。我现在需要覆盖每个对象的默认模板吗? – DaNeubi

+0

你是指每种元素类型?不,但这取决于你想要做什么以及如何定义默认模板:) – mm8

+0

好的。非常感谢。 :) – DaNeubi