1

これが機能しないのはなぜですか?

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

つまり、BackgroundofListBoxItemは選択されても変化しません。

デフォルトの項目テンプレートをオーバーライドすることなく、この単純な動作を実現したいと考えていました。確かに、ここには私が見ていない簡単な解決策があります。

アップデート

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>
...
4

1 に答える 1