2010-07-30 67 views
1

在我的WPF的項目,我有我的XAML繪製一個橢圓,並添加一個MouseEnter事件給它的畫布:MouseEnter事件不總是觸發

<Canvas Width="600" Height="480" Name="canvas1" HorizontalAlignment="Left"> 

     <Ellipse Height="20" Width="20" Canvas.Left="50" Canvas.Top="50" Fill="blue" Name="ellipse1" Mouse.MouseEnter="ellipse1_MouseEnter" MouseLeave ="ellipse1_MouseLeave"/> 

    </Canvas> 

在代碼隱藏我有了這個代碼:

private void ellipse1_MouseEnter(object sender, MouseEventArgs e) 
    { 
     ellipse1.Fill = Brushes.Red; 
    } 

當我用鼠標輸入橢圓時,它會按預期變成紅色。

我也有代碼在畫布上畫一個橢圓形,點擊我的鼠標。我有一個名爲Vertex的類,我在其中創建了一個橢圓,它具有對畫布的引用。

當我實例化一個新的頂點(以及一個橢圓)時,我將橢圓添加到畫布'children。將它添加到畫布前,我一個處理程序添加到MouseEnter事件:

MyEllipse.MouseEnter += new System.Windows.Input.MouseEventHandler(MyEllipse_MouseEnter); 

的「MyEllipse_MouseEnter」的處理程序是這樣的:

private void MyEllipse_MouseEnter(object sender, System.Windows.Input.MouseEventArgs e) 
    { 
     this.MyEllipse.Fill = Brushes.Red; 
    } 

我預計這個工作,因爲它是一樣的第一個有效的例子。

但是,當我用鼠標輸入繪製的橢圓時,我的處理程序不是caleld。但是,當多次在橢圓上來回移動時,它最終會觸發橢圓並將其着色爲紅色。但是這隻發生在我繪製的許多橢圓之一上,這看起來也很奇怪。

什麼可能導致這種奇怪的行爲?

回答

0

解決了問題!

將橢圓繪製爲頂點的一部分時,我向橢圓添加了一個標籤。 還好說,我把標籤上的橢圓形的頂部:

 Canvas.SetZIndex(myEllipse, 10); 
     Canvas.SetLeft(myEllipse, coordinates.X); 
     Canvas.SetTop(myEllipse, coordinates.Y); 

     Canvas.SetZIndex(myLabel, 10); 
     Canvas.SetLeft(myLabel, coordinates.X - 1); 
     Canvas.SetTop(myLabel, coordinates.Y - 5); 

     canvas.Children.Add(myEllipse); 
     canvas.Children.Add(myLabel); 

所以,當我在畫布上點擊橢圓其實我點擊標籤而不是橢圓。他的解決辦法很簡單:

 myLabel.IsHitTestVisible = false; 

現在在標籤不能hitted:d

THX感到沉淪!

0

您可以分享您正在使用的代碼以編程方式繪製橢圓。我懷疑你的程序化橢圓最初沒有填充使它透明,透明區域不被視爲橢圓的一部分,因此消息不會被提升到橢圓。

如果我上面的假設是正確的,那麼當你得到消息的時候,就是鼠標指針碰到橢圓的輪廓。

相關問題