WPF(.Net Core) 同时触发一个Grid/StackPanel的多个EventTrigger(来自children)
WPF(.Net Core) Trigger multiple EventTrigger (From the children) of a Grid/StackPanel at the same time
我有一个 WPF-app,它有一个网格。在网格内部有一个 StackPanel,其中包含一个图像和一个 TextBlock 元素。当我使用 grid/StackPanel 的事件处理程序“MouseOver”时,我想同时增加图片的大小 (ThicknessAnimationUsingKeyFrames) 和 TextBlock (DoubleAimation) 的 FontSize(StackPanel 内的所有内容)。
问题是我无法使用网格的事件处理程序来 运行 来自网格 Children 的事件触发器(图像和文本块。
我也尝试创建自定义 RoutedEvent,但由于隧道事件和冒泡事件无法到达 children(无广播),因此不可能。
找了一整天类似的问题和解决方案。但没有成功。有人可以帮助我吗?我不知道该怎么办。必须有解决方案。
这是我的网格:
<Grid Name="grid_Settings" Grid.Row="0" Grid.Column="5" MouserEnter="Grid_Settings_MouseEnter>
<StackPanel>
<Image Name="image_Settings" Margin="45,10,45,0" RenderTransformOrigion = "0.5, 0.5">
<Image.Triggers>
<EventTrigger RoutedEvent="**MouseEnter**">
<BeginStoryboard>
<Storyboard>
<ThicknessAnimationUsingKeyFrames Storyboard.TargetProptery="Margin" BeginTime ="0:0:0">
<SplineThicknessKeyFrame KeyTime="0:0:0" Value="45,10,45,0"></SplineThicknessKeyFrame>
<SplineThicknessKeyFrame KeyTime="0:0:0.2" Value="35,10,35,0"></SplineThicknessKeyFrame>
</ThicknessAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
<EventTrigger RoutedEvent="MouseLeave">
<BeginStoryboard>
<Storyboard>
<ThicknessAnimationUsingKeyFrames Storyboard.TargetProptery="Margin" BeginTime ="0:0:0">
<SplineThicknessKeyFrame KeyTime="0:0:0" Value="35,10,35,0"></SplineThicknessKeyFrame>
<SplineThicknessKeyFrame KeyTime="0:0:0.2" Value="45,10,45,0"></SplineThicknessKeyFrame>
</ThicknessAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Image.Triggers>
</Image>
<TextBlock Name="textBlock_Settings" FontSize="15" Margin="15" Text="Options">
<TextBlock.Triggers>
<EventTrigger RoutedEvent="MouseEnter">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Duraiton="0:0:.5" Storyboard.TargetProperty="FontSize" To="20"></DoubleAnimation>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
<EventTrigger RoutedEvent="MouseLeave">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Duraiton="0:0:.5" Storyboard.TargetProperty="FontSize" To="20"></DoubleAnimation>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</TextBlock.Triggers>
</TextBlock>
</StackPanel>
</Grid>
应使用 grid/StackPanel 中的事件处理程序 MouserEnter="Grid_Settings_MouseEnter" 触发 EventTriggers,而不是使用带有 RoutedEvent=" 的 EventTrigger MouseOver/Leave" 每个。
非常感谢您提供可能的答案,如果我表达得难以理解,请原谅。太晚了:D
您的 StackPanel 需要设置背景。
将你的动画移动到它下面,并添加到它的目标动画中:
<DoubleAnimation Storyboard.TargetName="textBlock_Settings" ....>
我有一个 WPF-app,它有一个网格。在网格内部有一个 StackPanel,其中包含一个图像和一个 TextBlock 元素。当我使用 grid/StackPanel 的事件处理程序“MouseOver”时,我想同时增加图片的大小 (ThicknessAnimationUsingKeyFrames) 和 TextBlock (DoubleAimation) 的 FontSize(StackPanel 内的所有内容)。
问题是我无法使用网格的事件处理程序来 运行 来自网格 Children 的事件触发器(图像和文本块。
我也尝试创建自定义 RoutedEvent,但由于隧道事件和冒泡事件无法到达 children(无广播),因此不可能。
找了一整天类似的问题和解决方案。但没有成功。有人可以帮助我吗?我不知道该怎么办。必须有解决方案。
这是我的网格:
<Grid Name="grid_Settings" Grid.Row="0" Grid.Column="5" MouserEnter="Grid_Settings_MouseEnter>
<StackPanel>
<Image Name="image_Settings" Margin="45,10,45,0" RenderTransformOrigion = "0.5, 0.5">
<Image.Triggers>
<EventTrigger RoutedEvent="**MouseEnter**">
<BeginStoryboard>
<Storyboard>
<ThicknessAnimationUsingKeyFrames Storyboard.TargetProptery="Margin" BeginTime ="0:0:0">
<SplineThicknessKeyFrame KeyTime="0:0:0" Value="45,10,45,0"></SplineThicknessKeyFrame>
<SplineThicknessKeyFrame KeyTime="0:0:0.2" Value="35,10,35,0"></SplineThicknessKeyFrame>
</ThicknessAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
<EventTrigger RoutedEvent="MouseLeave">
<BeginStoryboard>
<Storyboard>
<ThicknessAnimationUsingKeyFrames Storyboard.TargetProptery="Margin" BeginTime ="0:0:0">
<SplineThicknessKeyFrame KeyTime="0:0:0" Value="35,10,35,0"></SplineThicknessKeyFrame>
<SplineThicknessKeyFrame KeyTime="0:0:0.2" Value="45,10,45,0"></SplineThicknessKeyFrame>
</ThicknessAnimationUsingKeyFrames>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</Image.Triggers>
</Image>
<TextBlock Name="textBlock_Settings" FontSize="15" Margin="15" Text="Options">
<TextBlock.Triggers>
<EventTrigger RoutedEvent="MouseEnter">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Duraiton="0:0:.5" Storyboard.TargetProperty="FontSize" To="20"></DoubleAnimation>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
<EventTrigger RoutedEvent="MouseLeave">
<BeginStoryboard>
<Storyboard>
<DoubleAnimation Duraiton="0:0:.5" Storyboard.TargetProperty="FontSize" To="20"></DoubleAnimation>
</Storyboard>
</BeginStoryboard>
</EventTrigger>
</TextBlock.Triggers>
</TextBlock>
</StackPanel>
</Grid>
应使用 grid/StackPanel 中的事件处理程序 MouserEnter="Grid_Settings_MouseEnter" 触发 EventTriggers,而不是使用带有 RoutedEvent=" 的 EventTrigger MouseOver/Leave" 每个。
非常感谢您提供可能的答案,如果我表达得难以理解,请原谅。太晚了:D
您的 StackPanel 需要设置背景。
将你的动画移动到它下面,并添加到它的目标动画中:
<DoubleAnimation Storyboard.TargetName="textBlock_Settings" ....>