1

私の質問は単純です:それも可能ですか?

ListBoxItemデフォルトで前景が黒、選択されている場合は青、マウスが上にある場合は赤になるようにスタイルを設定するとします。私は次のようなものになりました:

<!-- assume the default foreground color is black -->
<ControlTemplate TargetType="ListBoxItem">
    <Grid Background="{TemplateBinding Background}">
        <VisualStateManager.VisualStateGroups>
            <VisualStateGroup x:Name="CommonStates">
                <VisualState x:Name="Normal"/>

                <VisualState x:Name="MouseOver">
                    <Storyboard>
                        <ColorAnimation Duration="0:0:0.2" To="Red" Storyboard.TargetName="contentControl" Storyboard.TargetProperty="(Control.Foreground).(SolidColorBrush.Color)"/>
                    </Storyboard>
                </VisualState>
            </VisualStateGroup>

            <VisualStateGroup x:Name="SelectionStates">
                <VisualState x:Name="Unselected"/>

                <VisualState x:Name="Selected">
                    <Storyboard>
                        <ColorAnimation Duration="0:0:0.2" To="Blue" Storyboard.TargetName="contentControl" Storyboard.TargetProperty="(Control.Foreground).(SolidColorBrush.Color)"/>
                    </Storyboard>
                </VisualState>
            </VisualStateGroup>
        </VisualStateManager.VisualStateGroups>

        <ContentControl x:Name="contentControl" Foreground="{TemplateBinding Foreground}" ContentTemplate="{TemplateBinding ContentTemplate}" Content="{TemplateBinding Content}"/>
    </Grid>
</ControlTemplate>

問題は、ListBoxItemクラスが選択状態を、マウスオーバーなどの一般的な状態とは別に、独自の視覚的状態グループに正しく配置していることです。つまり、aListBoxItemは選択状態とマウスオーバー状態の両方になります。

が選択され、青で正しく表示されている場合ListBoxItem、マウスを重ねると、通常の状態に戻るため、黒に戻ります。

サブクラスListBoxItem化して独自のカスタム状態を追加せずにこれを処理する方法はありますか?私が読んだすべてのことはそれが不可能であることを示唆していますが、それはばかげて私に制限されているようです。私は何が欠けていますか?

4

1 に答える 1

3

基本的に、フォアグラウンドを同時に黒と青にするように要求します。今ではそれは不可能です。この競合は、MouseOver> Selected> Normal> Unselectedのように、個々の状態が優先される場合に解決できます。しかし、それはすでに複雑なビジュアルステートマネージャーに不必要な複雑さをもたらします。通常、この状況は、新しい要素を追加し、競合する状態グループの1つでその要素のプロパティをアニメーション化することで解決されます。

于 2010-09-11T20:58:48.197 に答える