Проверьте, куда MouseLeave () уходит - PullRequest
0 голосов
/ 24 февраля 2009

У меня есть UserControl myListItem, который входит в ListBox'ы. При наведении курсора мыши отображается всплывающее окно, и в этом всплывающем окне есть представление прокрутки, которое пользователь может использовать для прокрутки текста в представлении. Я сделал обработчик событий, который отображает всплывающее окно, когда мышь входит, но я немного борюсь с тем, когда мышь уходит. Если мышь уходит во всплывающее окно, всплывающее окно должно остаться, но когда мышь уходит другим способом, всплывающее окно должно быть отключено. Есть ли у вас какие-либо предложения о том, как решить эту проблему? Я думаю, что был бы способ выглядеть примерно так:

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

Приветствия

Nik

1 Ответ

1 голос
/ 24 февраля 2009

Предположим, у вас есть этот всплывающий код 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 относительно вашего всплывающего содержимого (здесь это Border control).

...