2010-07-20 86 views
2

作爲圖的一部分,我繪製了幾個重疊的形狀,每個具有Opacity=0.5,就像這裏:WPF:不透明度和MouseEnter事件

<Grid> 
    <Rectangle Fill="Blue" Opacity="0.5" MouseEnter="Rectangle_MouseEnter" /> 
    <Rectangle Fill="Red" Opacity="0.5" /> 
</Grid> 


private void Rectangle_MouseEnter(object sender, MouseEventArgs e) 
    { 
    MessageBox.Show("Entered"); 
    } 

當用戶用鼠標進入的形狀,一些額外的應該顯示信息,但事件處理程序永遠不會被調用。

有沒有辦法讓所有形狀的MouseEnter事件,而不是最上面的一個?

回答

2

在佈局中,只有最上面的矩形會引發MouseEnter事件。它完全重疊第一個矩形。

試試這個代碼事件處理程序:

private void Rectangle_MouseEnter(object sender, MouseEventArgs e) 
     { 
      if (sender != grid.Children[0]) 
      { 
       var rect = (grid.Children[0] as Rectangle); 
       if (rect != null) rect.RaiseEvent(e); 
      } 
      else 
      { 
       MessageBox.Show("Entered."); 
      } 
     } 

對於這個工作,你需要兩個矩形訂閱Rectangle_MouseEnter。

+0

是的,我注意到了。 =)當用戶進入一個背後的東西時,是否有另一種方式獲得通知? – Jens 2010-07-20 14:30:42

+0

恐怕沒有...... MouseEnter和MouseLeave事件不會在您放置光標的控件上進行冒泡和提升。 http://msdn.microsoft.com/en-us/library/cc189029(v=VS.95).aspx#mouse_routed_events – 2010-07-20 15:05:57

+0

檢查更新,可能會幫助你。 – 2010-07-20 15:10:54