2009-02-24 6 views
0

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

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

Приветствия

Nik

ответ

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

+0

Привет, и спасибо за ваш ответ. :-) Я не думал о том, чтобы делать вычитание в MouseMove(). Если я правильно вас понимаю, вы предлагаете мне самим вычислять, а не использовать встроенные функции? –

+0

Нет ли теста на хит, связанного с точкой? Что-то вроде этого возможно? MyPopup.HitTest (e.GetPosition (null)) –