2009-10-02 58 views
0

我有一个由动画(使用RenderTransform)移动的红色边框,底下的蓝色边框处理MouseEnter事件。在动画过程中未触发MouseEnter事件

不幸的是,当鼠标进入蓝色边框(因为红色边框已移开),但鼠标移动时,MouseEnter未被触发。

以下示例在Silverlight中进行了测试,但我相信WPF中会发生同样的情况。

编辑:进一步测试后,在WPF中的作品。这是JavaJul建议的错误还是Silverlight中“缺失的功能”之一?

XAML

<Grid x:Name="borders" Width="40" Height="20"> 
    <Grid.Resources> 
     <Storyboard x:Key="blueMove"> 
      <DoubleAnimation Duration="0:0:3" From="0" To="40" Storyboard.TargetName="redBorder" 
         Storyboard.TargetProperty="(UIElement.RenderTransform).(TransformGroup.Children)[0].(TranslateTransform.Y)"/> 
     </Storyboard> 
    </Grid.Resources> 
    <Border Background="Blue" MouseEnter="Border_MouseEnter" /> 
    <Border x:Name="redBorder" Background="Red" MouseLeftButtonDown="Border_MouseLeftButtonDown"> 
     <Border.RenderTransform> 
      <TransformGroup> 
       <TranslateTransform Y="0"/> 
      </TransformGroup> 
     </Border.RenderTransform> 
    </Border> 
</Grid> 

C#代码背后

private void Border_MouseEnter(object sender, MouseEventArgs e) 
{ 
// Only called at the first MouseMove 
} 

private void Border_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
{ 
(borders.Resources["blueMove"] as Storyboard).Begin(); 
} 
+0

我刚刚在connect.microsoft.com上提交了这个错误,但我仍在寻找解决方法。 – Mart 2009-10-03 08:58:46

+0

Microsoft Connect发送了以下评论: “我们正在将此问题重新分配给Visual Studio产品团队中的相应组进行分类和解决。” 这并不意味着这已被接受为一个错误。 – Mart 2009-10-07 11:30:56

+0

Microsoft Connect终于发送了令人失望的答案:这是一个已知问题(但不是错误)。事实上正如MouseEnter事件页面(http://msdn.microsoft.com/en-us/library/system.windows.uielement.mouseenter%28VS.95%29.aspx)所述: “MouseEnter不会引发,如果鼠标指针(或触控笔尖)保持静止,并且带有MouseEnter处理程序的对象将其位置设置为动画或调整为在鼠标指针下移动“ ”这意味着无法解决该问题。 – Mart 2010-02-01 12:54:38

回答

0

这工作在WPF罚款在Silverlight那么人们会认为这是在Silverlight中一个可能的错误。我建议你填写关于Connect的问题报告。

+0

谢谢MrJul。在将此作为错误提交之前,我想确定这是否不是Silverlight中故意遗漏的功能。 也有可能有一个解决方法。我真的无法想象一种方法来触发事件一次又一次的正确时间。 – Mart 2009-10-03 07:15:52

+0

你是对的,但他们打电话是一个问题,而不是一个错误。 – Mart 2010-02-01 12:55:01