如何在WPF中执行xaml中任何控件的事件的故事板?

dzhpxtsq  于 2022-11-18  发布在  其他
关注(0)|答案(1)|浏览(154)

我使用的是C# WPF,并且具有Border的动画样式,该Border位于Grid内,该GridMouseEnter事件上引发

  1. <Style x:Key="Atash" TargetType="Border">
  2. <Style.Triggers>
  3. <EventTrigger RoutedEvent="UIElement.MouseEnter">
  4. <BeginStoryboard>
  5. <Storyboard>
  6. <DoubleAnimationUsingKeyFrames Storyboard.TargetProperty="(UIElement.Effect).(DropShadowEffect.BlurRadius)" >
  7. <EasingDoubleKeyFrame KeyTime="0" Value="12">
  8. <EasingDoubleKeyFrame.EasingFunction>
  9. <ExponentialEase EasingMode="EaseInOut"/>
  10. </EasingDoubleKeyFrame.EasingFunction>
  11. </EasingDoubleKeyFrame>
  12. <EasingDoubleKeyFrame KeyTime="0:0:0.3" Value="37">
  13. <EasingDoubleKeyFrame.EasingFunction>
  14. <ExponentialEase EasingMode="EaseInOut"/>
  15. </EasingDoubleKeyFrame.EasingFunction>
  16. </EasingDoubleKeyFrame>
  17. </DoubleAnimationUsingKeyFrames>
  18. <ThicknessAnimationUsingKeyFrames Storyboard.TargetProperty="(Border.BorderThickness)" >
  19. <EasingThicknessKeyFrame KeyTime="0" Value="5,3">
  20. <EasingThicknessKeyFrame.EasingFunction>
  21. <ExponentialEase EasingMode="EaseInOut"/>
  22. </EasingThicknessKeyFrame.EasingFunction>
  23. </EasingThicknessKeyFrame>
  24. </ThicknessAnimationUsingKeyFrames>
  25. <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Panel.Background).(SolidColorBrush.Color)" >
  26. <EasingColorKeyFrame KeyTime="0" Value="#FF4CAF50">
  27. <EasingColorKeyFrame.EasingFunction>
  28. <ExponentialEase EasingMode="EaseInOut"/>
  29. </EasingColorKeyFrame.EasingFunction>
  30. </EasingColorKeyFrame>
  31. <EasingColorKeyFrame KeyTime="0:0:0.3" Value="#FF4CAF50"/>
  32. </ColorAnimationUsingKeyFrames>
  33. </Storyboard>
  34. </BeginStoryboard>
  35. </EventTrigger>
  36. </Style>

我需要的是:

当我将边框的样式设置为Border x:Name="border2" Style="{StaticResource Atash}"时,当MouseEnter事件在Border上发生时(鼠标在边框上),动画开始。但我希望动画在所有事件中执行,我希望根据几个指定的控件。
我的意思是,我也可以在网格上设置此样式:Grid Style="{StaticResource Atash}"
为什么,因为我想让这个动画在鼠标位于网格上时运行,而不仅仅是在边框上

长话短说:我想对要调用的任何控件中的任何事件执行动画,但只能使用***XAML***。我不想使用代码隐藏

谢谢
5月相关链接:

更新完整XAML代码

  1. <Window x:Class="WpfApp11.MainWindow"
  2. xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
  3. xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
  4. xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
  5. xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
  6. xmlns:local="clr-namespace:WpfApp11"
  7. mc:Ignorable="d"
  8. Title="MainWindow" Height="450" Width="800">
  9. <Window.Resources>
  10. <Style x:Key="Atash" TargetType="FrameworkElement">
  11. <Style.Triggers>
  12. <EventTrigger RoutedEvent="MouseEnter">
  13. <BeginStoryboard>
  14. <Storyboard>
  15. <ThicknessAnimationUsingKeyFrames Storyboard.TargetProperty="(Border.BorderThickness)">
  16. <EasingThicknessKeyFrame KeyTime="0:0:0.2" Value="1,1,10,1">
  17. <EasingThicknessKeyFrame.EasingFunction>
  18. <ExponentialEase EasingMode="EaseInOut"/>
  19. </EasingThicknessKeyFrame.EasingFunction>
  20. </EasingThicknessKeyFrame>
  21. </ThicknessAnimationUsingKeyFrames>
  22. <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Border.BorderBrush).(SolidColorBrush.Color)">
  23. <EasingColorKeyFrame KeyTime="0:0:0.2" Value="#FF23A232">
  24. <EasingColorKeyFrame.EasingFunction>
  25. <ExponentialEase EasingMode="EaseInOut"/>
  26. </EasingColorKeyFrame.EasingFunction>
  27. </EasingColorKeyFrame>
  28. </ColorAnimationUsingKeyFrames>
  29. </Storyboard>
  30. </BeginStoryboard>
  31. </EventTrigger>
  32. <EventTrigger RoutedEvent="MouseLeave">
  33. <BeginStoryboard>
  34. <Storyboard x:Name="DoOnOut">
  35. <ThicknessAnimationUsingKeyFrames Storyboard.TargetProperty="(Border.BorderThickness)">
  36. <SplineThicknessKeyFrame KeyTime="0" Value="1,1,10,1"/>
  37. <EasingThicknessKeyFrame KeyTime="0:0:0.2" Value="1">
  38. <EasingThicknessKeyFrame.EasingFunction>
  39. <ExponentialEase EasingMode="EaseInOut"/>
  40. </EasingThicknessKeyFrame.EasingFunction>
  41. </EasingThicknessKeyFrame>
  42. </ThicknessAnimationUsingKeyFrames>
  43. <ColorAnimationUsingKeyFrames Storyboard.TargetProperty="(Border.BorderBrush).(SolidColorBrush.Color)">
  44. <SplineColorKeyFrame KeyTime="0" Value="#FF23A232"/>
  45. <EasingColorKeyFrame KeyTime="0:0:0.2" Value="White">
  46. <EasingColorKeyFrame.EasingFunction>
  47. <ExponentialEase EasingMode="EaseInOut"/>
  48. </EasingColorKeyFrame.EasingFunction>
  49. </EasingColorKeyFrame>
  50. </ColorAnimationUsingKeyFrames>
  51. </Storyboard>
  52. </BeginStoryboard>
  53. </EventTrigger>
  54. </Style.Triggers>
  55. </Style>
  56. </Window.Resources>
  57. <Grid Background="#FF1B1B1C">
  58. <Grid x:Name="GrdBtn2" Style="{StaticResource Atash}" Margin="323,167,345,135">
  59. <Border x:Name="border2" Visibility="Visible" BorderBrush="White" BorderThickness="5,3" CornerRadius="80" Cursor="Hand" Width="auto" Height="auto" Background="#FF4CAF50">
  60. <Border.Effect>
  61. <DropShadowEffect Color="White" BlurRadius="12" ShadowDepth="0"/>
  62. </Border.Effect>
  63. </Border>
  64. <TextBlock Text=" Automasion" LineStackingStrategy="MaxHeight" LineHeight="20" TextAlignment="Center" Width="auto" Height="auto" TextWrapping="Wrap" Margin="25,22,27,21" Foreground="White" Background="{x:Null}" HorizontalAlignment="Center" VerticalAlignment="Center"/>
  65. </Grid>
  66. </Grid>

Grid的鼠标输入时出错:

  1. System.InvalidOperationException: ''BorderBrush' property does not point to a DependencyObject in path '(0).(1)'.'
gt0wga4j

gt0wga4j1#

如果将StyleTargetType设置为FrameworkElement,则可以将其应用于任何FrameworkElement,包括GridBorder

  1. <Style x:Key="Atash" TargetType="FrameworkElement">
  2. ...

显然,除了Border之外,你不能动画化其他任何东西的BorderThickness
您的动画也假设要制作动画的元素的Background设定为SolidColorBrush,并且套用了DropShadowEffect

相关问题