У меня есть этот код:
<UserControl.Resources>
<Storyboard x:Key="OnMouseEnterToDocumentsMenu">
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="Documents">
<EasingDoubleKeyFrame KeyTime="0:0:0.2" Value="0.8"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
<Storyboard x:Key="OnMouseLeaveFromDocumentsMenu">
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="Documents">
<EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="0.3"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
<Storyboard x:Key="OnMouseEnterToPeopleMenu">
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="People">
<EasingDoubleKeyFrame KeyTime="0:0:0.2" Value="0.8"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
<Storyboard x:Key="OnMouseLeaveFromPeopleMenu">
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Opacity)" Storyboard.TargetName="People">
<EasingDoubleKeyFrame KeyTime="0:0:0.5" Value="0.3"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</Storyboard>
</UserControl.Resources>
<UserControl.Triggers>
<EventTrigger RoutedEvent="Mouse.MouseEnter" SourceName="Documents">
<BeginStoryboard Storyboard="{StaticResource OnMouseEnterToDocumentsMenu}"/>
</EventTrigger>
<EventTrigger RoutedEvent="Mouse.MouseLeave" SourceName="Documents">
<BeginStoryboard Storyboard="{StaticResource OnMouseLeaveFromDocumentsMenu}"/>
</EventTrigger>
<EventTrigger RoutedEvent="Mouse.MouseEnter" SourceName="People">
<BeginStoryboard Storyboard="{StaticResource OnMouseEnterToPeopleMenu}"/>
</EventTrigger>
<EventTrigger RoutedEvent="Mouse.MouseLeave" SourceName="People">
<BeginStoryboard Storyboard="{StaticResource OnMouseLeaveFromPeopleMenu}"/>
</EventTrigger>
</EventTrigger>
</UserControl.Triggers>
Назначение
Я анимация меню. Элементами меню являются TextBlocks, я имитирую «Затухание при наведении».
Задача
Код, который я разместил, оживляет прозрачность, когда мышь входит или выходит. У меня есть другой метод (код позади), который устанавливает «1» непрозрачности элемента меню, как только пользователь щелкает его в меню (и загружает соответствующий пользовательский элемент управления в соответствующий контейнер). Я предполагаю, что этот метод работает, НО , как только анимация MouseLeave запускается, он снова теряет прозрачность, независимо от того, был выбран этот элемент или нет (Если его непрозрачность была 1, а не 0,8).
Нуждается
Есть ли способ указать, что триггер MouseLeave срабатывает только тогда, когда Source Opacity не равен 1. Или выполнять раскадровку, только если TargetProperty не равен 1.
Спасибо.
PS
Есть ли способ предотвратить дублирование кода, учитывая, что анимационные раскадровки одинаковы (для фокуса и для затухания) и что появится больше меню. Я продублирую его, потому что мне нужно указать TargetName, но я полагаю, что есть и другой «более чистый» способ.