2011-01-26 2 views
2

Я пытаюсь получить всплывающее окно, чтобы показать, когда мышь вводит кнопку.Выясните, где моя мышь, когда я обрабатываю событие MouseLeave?

Он должен скрыть, если пользователь покидает всплывающее окно.

Но для хорошего пользовательского взаимодействия всплывающее окно должно также оставаться открытым, если пользователь возвращается на кнопку.

Таким образом, когда мышь выйдет из всплывающего окна, событие отключения мыши запускается, но я не хочу его обрабатывать, если мышь сразу входила в кнопку.

Есть ли способ узнать, находится ли мышь над другим элементом управления в событии оставления мыши?

Я пробовал много разных подходов без успеха. Скажите, пожалуйста, если у вас другой подход к проблеме!

ответ

2

Установите таймер, когда событие MouseLeave будет запущено, а также булевое, возможно, получившее название closingPopup, до true. Таймер установит closingPopup на false и скроет всплывающее окно. В событии MouseEnter кнопки, если closePopup является истинным, остановите таймер и установите для boolean значение false.

Это или вариант того, что должно получить то, что вы хотите. Вы можете дать ему задержку в 1/4 секунды. Или любую сумму, которая кажется отзывчивой.

Редактировать: Возможно, вы также должны добавить ту же самую отметку в MouseLeave для кнопки. (Рад, что я мог бы помочь!)

+0

Я проверить свой ответ, потому что было достаточно, чтобы я going.I приступил к реализации, что раньше, и по какой-то причине, попробовал другой подход, прежде чем достраивают ... Благодаря! Я начал отчаянно. :) –

2

Это может быть достигнуто пуском таймера, когда мышь покидает кнопку, когда таймер тикает, закройте всплывающее окно. Если мышь вернется к кнопке, остановите таймер.

private DispatcherTimer timer = new DispatcherTimer(); 

public MainPage() 
{ 
    InitializeComponent(); 

    timer.Interval = TimeSpan.FromSeconds(1); 
    timer.Tick += Timer_Tick; 
} 

private void Timer_Tick(object sender, EventArgs e) 
{ 
    MyPopUp.IsOpen = false; 
    timer.Stop(); 
} 

private void Button_MouseEnter(object sender, MouseEventArgs e) 
{ 
    timer.Stop();  
    MyPopUp.IsOpen = true; 
} 

private void Button_MouseLeave(object sender, MouseEventArgs e) 
{ 
    timer.Start(); 
} 

С следующей разметке:

<Button MouseEnter="Button_MouseEnter" MouseLeave="Button_MouseLeave"> 
    <Popup x:Name="MyPopUp">   
     <Grid Width="100" Height="20" Background="Red"> 
     <TextBlock Text="Hi"/> 
     </Grid> 
    </Popup>   
    </Button> 
Смежные вопросы