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" ....>