Редактировать: В исходном вопросе я сделал несколько неправильных предположений о том, как работают сеттеры, поэтому я изменил его, чтобы, надеюсь, быть более точным и полезным.
Я попытался сделать некоторые пункты меню более интересными, чтобы значки казались полупрозрачными, если мышь не находится над элементом. Если мышь входит, значок должен быть анимирован, чтобы стать полностью видимым.
Анимация работает, Storyboard.TargetProperty
обеспечивает прямой доступ к свойству непрозрачности иконки:
<Style x:Key="MenuItemMouseOverStyle" TargetType="MenuItem">
<Style.Triggers>
<EventTrigger RoutedEvent="MouseEnter">
<BeginStoryboard>
<Storyboard>
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="Icon.Opacity">
<EasingDoubleKeyFrame KeyTime="0" Value="0.5"/>
<EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="1"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
<EventTrigger RoutedEvent="MouseLeave">
<BeginStoryboard>
<Storyboard>
<DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="Icon.Opacity">
<EasingDoubleKeyFrame KeyTime="0" Value="1"/>
<EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="0.5"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Style.Triggers>
</Style>
Если я попытаюсь использовать установщик для начальной непрозрачности значка, код не скомпилируется:
<Setter Property="Icon.Opacity" Value="0.5"/>
Edit:
Сеттеры не работают так, как я пытался их использовать, вы не можете получить доступ к свойствам свойств (см. Ответы)
Единственное, что вы можете сделать, это указать целевой класс, если целевой тип стиля не был установлен, следующие стили должны быть эквивалентны:
<Style x:Key="Style1" TargetType="Image">
<Setter Property="Opacity" Value="0.5"/>
</Style>
<Style x:Key="Style2">
<Setter Property="Image.Opacity" Value="0.5"/>
</Style>
Так что мой вопрос, есть ли способ заставить это работать как-то с помощью сеттера.
(Мой текущий обходной путь - раскадровка с одним ключевым кадром, которая запускается с событием Loaded
, которое работает довольно хорошо)