Узнайте, где моя мышь, когда я обрабатываю событие MouseLeave? - PullRequest
2 голосов
/ 26 января 2011

Я пытаюсь заставить всплывающее окно показывать, когда мышь вводит кнопку.

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

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 26 января 2011

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

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>
2 голосов
/ 26 января 2011

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...