测试MouseLeave()离开的位置

时间:2009-02-24 08:50:40

标签: silverlight event-handling mouseevent

我有一个名为myListItem的UserControl进入ListBox'es。鼠标悬停时,它会显示一个弹出窗口,弹出窗口中有一个滚动视图,用户可能希望用它来滚动视图中的文本。我制作了一个事件处理程序,当鼠标进入时会显示弹出窗口,但是当鼠标离开时我会稍微捣乱。如果鼠标离开弹出窗口,弹出窗口应该保持不变,但是当鼠标离开时,弹出窗口应该被禁用。您对如何解决这个问题有什么建议吗?我认为有一种方式看起来像这样:

void MouseLeave(object sender, MouseEventArgs e) {
  if(!e.Position.Intersects(itemPopUp.BoundingBox))
    itemPopUp.IsOpen = false;
}

干杯

的Nik

1 个答案:

答案 0 :(得分:1)

假设你有这个Popup XAML代码:

<Popup x:Name="MyPopup">
    <Border Width="200" Height="200" BorderThickness="1" BorderBrush="Black" Background="Pink"
            MouseLeave="Border_MouseLeave" MouseMove="Border_MouseMove" >

    </Border>
</Popup>
<TextBlock x:Name="MouseLeaveLoc" Text="N/A" />

,这在代码背后(C#):

private void Border_MouseLeave(object sender, MouseEventArgs e)
{
    MouseLeaveLoc.Text = mouseLoc.ToString();
}

private Point mouseLoc;
private void Border_MouseMove(object sender, MouseEventArgs e)
{
    mouseLoc = e.GetPosition(MyPopup);
    mouseLoc.X -= MyPopup.HorizontalOffset;
    mouseLoc.Y -= MyPopup.VerticalOffset;
}

mouseLoc包含相对于弹出内容的X,Y值(此处为边框控件)。