2017-04-20 9 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をクリックすると、それが適切に設定された背景プロパティを取得できません。新しいForegroundと新しいFontWeightが設定されますが、Backgroundは設定されません。

<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

は、背景を変更しないでください – DaNeubi

答えて

3

これが原因で、既定のコントロールテンプレートは次のとおりです。

は、これは私のListBoxMainWindowです。これを上書きする必要があります:

<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

関連する問題