2010-07-20 67 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