Mam projektu WPF z obramowaniem przy użyciu następującego stylu. Plan polega na tym, aby efekt blasku zanikł, gdy mysz przesunie się przez granicę i zaniknie, gdy opuści.Jak animować krycie w programie DropShadowEffect?
<Style x:Key="BorderGlow" TargetType="Border">
<Style.Resources>
<Storyboard x:Key="GlowOn">
<DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetProperty="(DropShadowEffect.Opacity)">
<SplineDoubleKeyFrame KeyTime="0:0:0.3" Value="1"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
<Storyboard x:Key="GlowOff">
<DoubleAnimationUsingKeyFrames BeginTime="00:00:00" Storyboard.TargetProperty="(DropShadowEffect.Opacity)">
<SplineDoubleKeyFrame KeyTime="0:0:0.3" Value="0"/>
</DoubleAnimationUsingKeyFrames>
</Storyboard>
</Style.Resources>
<Setter Property="CornerRadius" Value="6,1,6,1" />
<Setter Property="BorderBrush" Value="{StaticResource SelectedBorder}" />
<Setter Property="BorderThickness" Value="1" />
<Setter Property="Background" Value="{StaticResource DeselectedBackground}" />
<Setter Property="RenderTransformOrigin" Value="0.5,0.5" />
<Setter Property="TextBlock.Foreground" Value="{StaticResource SelectedForeground}" />
<Setter Property="RenderTransform">
<Setter.Value>
<RotateTransform Angle="90"/>
</Setter.Value>
</Setter>
<Setter Property="Effect">
<Setter.Value>
<DropShadowEffect ShadowDepth="0" BlurRadius="8" Color="#FFB0E9EF"/>
</Setter.Value>
</Setter>
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Trigger.EnterActions>
<BeginStoryboard Storyboard="{StaticResource GlowOn}"/>
</Trigger.EnterActions>
<Trigger.ExitActions>
<BeginStoryboard Storyboard="{StaticResource GlowOff}"/>
</Trigger.ExitActions>
</Trigger>
</Style.Triggers>
</Style>
Problem polega na tym, że nic się nie dzieje! Animacja działa, jeśli zmienię "DropShadowEffect" na "UIElement" w Storyboard TargetProperty, ale to zanika całą kontrolę.
Jak wyciszyć tylko DropShadowEffect?
dostaję InvalidOperationException ponieważ Efekt robi” t ma właściwość Opacity. Wartością Effect jest DropShadowEffect, który ma właściwość Opacity, którą próbuję kierować, ale jak wskazujesz, mój XAML jest nieprawidłowy. Próbowałem już ustawić x: Nazwa na DropShadowEffect, ale nie można używać TargetName w stylach. W dokumentacji MSDN jest luka na temat użycia tych nawiasów w scenorysach, ale znalazłem to w pomocy dla PropertyPath. Jednak nadal nie mogę rozwiązać problemu. Myślę, że muszę rzucić Effect do DropShadowEffect, ale nie wydaje się to możliwe w XAML. Jakieś inne pomysły? – Zodman
Udało mi się uzyskać kod, który opublikowałeś pracując, korzystając z podanej przeze mnie składni. Zrobiłem to w przykładowej aplikacji. Opublikuję to, czego użyłem, a może powrócisz z tego ... –
Uwaga Usunąłem settery, które używają zasobów statycznych, których nie dostarczyłeś, ale to nie będzie miało wpływu na demonstrację. I zauważam, że próbujesz ustawić właściwość TextBlock.Foreground w swoim stylu, która również nie zadziała. –