これが機能しないのはなぜですか?
<ListBox>
<ListBox.Items>
<ListBoxItem>Foo</ListBoxItem>
<ListBoxItem>Bar</ListBoxItem>
<ListBoxItem>Text</ListBoxItem>
</ListBox.Items>
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Style.Triggers>
<Trigger Property="IsSelected" Value="True" >
<Setter Property="Background" Value="Red" />
</Trigger>
</Style.Triggers>
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
つまり、Background
ofListBoxItem
は選択されても変化しません。
デフォルトの項目テンプレートをオーバーライドすることなく、この単純な動作を実現したいと考えていました。確かに、ここには私が見ていない簡単な解決策があります。
アップデート
Windows 7 と Windows 8 の両方で機能することがわかった唯一の方法は、デフォルトをオーバーライドすることですItemContainerStyle
。これは、Visual Studio でコントロールを右クリックし、[スタイルの編集] - [コピーの編集] を実行できるようになったため、少し痛みが軽減されました。下。導入/上書きを余儀なくされている完全なテンプレートの関連部分のみを示しています。
もっと簡単な方法はありませんか?
...
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Property="Selector.IsSelectionActive" Value="True"/>
<Condition Property="IsSelected" Value="True"/>
</MultiTrigger.Conditions>
<!--<Setter Property="Background" TargetName="Bd" Value="#3D26A0DA"/>-->
<!-- Changed above line to the following line... -->
<Setter Property="Background" TargetName="Bd" Value="Red"/>
<Setter Property="BorderBrush" TargetName="Bd" Value="#FF26A0DA"/>
</MultiTrigger>
...