私の質問は単純です:それも可能ですか?
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
化して独自のカスタム状態を追加せずにこれを処理する方法はありますか?私が読んだすべてのことはそれが不可能であることを示唆していますが、それはばかげて私に制限されているようです。私は何が欠けていますか?