#wpf #animation #expression-blend
#wpf #Анимация #выражение-смешивание
Вопрос:
я пытаюсь изменить стиль itemcontainerstyle списка, изменив наведение курсора мыши и выбранное состояние.
с чем-то вроде этого
<VisualState x:Name="MouseOver">
<Storyboard>
<ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)" Storyboard.TargetName="border">
<EasingColorKeyFrame KeyTime="0" Value="#48FF5643"/>
</ColorAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualStateGroup x:Name="SelectionStates">
<VisualState x:Name="Unselected"/>
<VisualState x:Name="Selected">
<Storyboard>
<ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)" Storyboard.TargetName="border">
<EasingColorKeyFrame KeyTime="0" Value="#FFFF5643"/>
</ColorAnimationUsingKeyFrames>
</Storyboard>
</VisualState>
<VisualState x:Name="SelectedUnfocused"/>
</VisualStateGroup>
enter code here
проблема в том, что если у меня выбран элемент, и я наведу на него курсор мыши, его состояние изменится на mouseoverstate, и я хочу этого избежать
я также пробовал мультитриггеры controltemplate с чем-то вроде
<MultiTrigger.Conditions>
<Condition Property="IsSelected" Value="False" />
<Condition Property="IsMouseOver" Value="False" />
</MultiTrigger.Conditions>
но это не сработало, и нет свойства IsMouseLeave
надеюсь, я четко объясню проблему, поэтому любая помощь приветствуется
спасибо и хорошего дня!
Ответ №1:
Гораздо проще изменить ListBoxItem.Background
свойство, используя a Trigger
и some SystemColors
. Попробуйте это вместо:
<ListBox ItemsSource="{Binding Days}">
<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}">
<Style.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="#FFFF5643" />
<SolidColorBrush x:Key="{x:Static SystemColors.ControlBrushKey}" Color="#FFFF5643" />
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightTextBrushKey}" Color="Black" />
</Style.Resources>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Background" Value="#48FF5643" />
</Trigger>
</Style.Triggers>
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
У меня такое ощущение, что они SystemColors
могут не работать ни в Windows 8, ни в .NET 4.5, но они работают с .NET 4 и Windows 7. Дайте мне знать, если это делает то, что вы хотели.
ОБНОВИТЬ >>>
проблема заключается в mouseLeave, такого свойства у eventtriggers нет
Возможно, вам следует продолжить изучение Trigger
класса?:
<Trigger Property="IsMouseOver" Value="True">
<Trigger.EnterActions>
<!--Performed with MouseEnter event-->
</Trigger.EnterActions>
<Trigger.ExitActions>
<!--Performed with MouseLeave event-->
</Trigger.ExitActions>
</Trigger>
Комментарии:
1. да, но если выбран элемент, я не хочу, чтобы он реагировал на триггер наведения курсора мыши, решением, на мой взгляд, было бы сочетание триггеров VSM и свойств, поэтому определите выбранное состояние с помощью vsm и наведения курсора мыши с несколькими условиями: наведение курсора мыши и isselected= false . проблема заключается в mouseLeave, такого свойства у eventtriggers нет