У меня простой вопрос: возможно ли это?
Предположим, я хочу задать стиль 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
правильно разместил состояния выбора в своей собственной группе визуальных состояний, отдельно от общих состояний, таких как наведение мыши.Это означает, что ListBoxItem
может находиться как в выбранном состоянии, так и в состоянии наведения мыши.
Если ListBoxItem
выбран и правильно отображается синим цветом, при наведении курсора на него он снова становится черным, поскольку он возвращается кнормальное состояние.
Можно ли мне как-то справиться с этим, не прибегая к подклассам ListBoxItem
и не добавляя свои собственные пользовательские состояния?Все, что я прочитал, говорит о том, что это невозможно, но мне кажется, что это смехотворно ограничивает меня.Чего мне не хватает?