2009-10-02 72 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