2017-01-13 12 views
0

У меня есть приложение Windows 8.1 Universal. Я работаю, и все страницы «внутри» корневого объекта Frame.Как снять мышь «назад» и заставить ее сделать что-то еще?

Целевая страница - это домашняя страница, и пользователь может выбрать один из 5 разных страниц. Когда пользователь переходит на одну из этих страниц, на странице есть кнопка «домой», чтобы вернуть их на домашнюю страницу.

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

Можно ли «отключить» любое действие этих кнопок вперед и назад на мыши? Если это невозможно, могу ли я захватить это событие и перенаправить его методу, который имеет необходимую логику?

Спасибо,
Zach

ответ

0

Я думаю, что вы ищете концепции навигационной службы.

И это MSDN Article должно помочь вам в управлении вашей обратной навигацией.

+0

Благодарим за ответ и ссылку. К сожалению, ссылка предназначена для приложений UWP, и я попробовал код, чтобы получить обработчик «назад запрошен», и он недоступен для 8.1 приложений. – zachboy82

0

VK_XBUTTON1 и VK_XBUTTON2. Это константы для дополнительных кнопок мыши, которые часто назначаются для перемотки вперед и назад.

Если вы хотите сразу обращаться с сообщениями кнопки X, они отправляются в ваше приложение с использованием WM_XBUTTONDOWN и WM_XBUTTONUP.

Проверить здесь: https://msdn.microsoft.com/en-us/library/windows/desktop/dd375731.aspx

+0

Это удобный список, но он не содержит информации о том, как захватить эти события. – zachboy82

0

Edit: Я просто заметил, что этот вопрос о «Универсальное приложение», этот пример для WinForms, но это может быть полезно для нахождения ответа на Универсальной или UWP приложений ...

Предполагая, что у вас уже есть два обработчика событий на кнопки для перемещения в обратном направлении (void NavigateBack(object sender, EventArgs e)) и вперед (void NavigateForward(object sender, EventArgs e))

Сначала добавьте этот фрагмент в свой код формы:

private void HandlePreviewKeyDown(object sender, PreviewKeyDownEventArgs e) 
{ 
    switch (e.KeyCode) 
    { 
     case Keys.XButton1: 
      NavigateBack(sender, e); // call the back button event handler 
      break; 
     case Keys.XButton2: 
      NavigateForward(sender, e); // call the forward button event handler 
      break; 
    } 
} 

private void HandleMouseDown(object sender, MouseEventArgs e) 
{ 
    switch (e.Button) 
    { 
     case MouseButtons.XButton1: 
      NavigateBack(sender, e); // call the back button event handler 
      break; 
     case MouseButtons.XButton2: 
      NavigateForward(sender, e); // call the forward button event handler 
      break; 
    } 
} 

Затем перейдите к представлению дизайнера, просмотрите все основные элементы управления в форме и подключите события PreviewKeyDown и MouseDown к соответствующим методам.

Лучше (на будущее) способом было бы написать код рекурсивно Подвод события, как это:

private void HookupNavigationButtons(Control ctrl) 
{ 
    for (int t = ctrl.Controls.Count - 1; t >= 0; t--) 
    { 
     Control c = ctrl.Controls[t]; 
     c.PreviewKeyDown -= HandlePreviewKeyDown; 
     c.PreviewKeyDown += HandlePreviewKeyDown; 
     c.MouseDown -= HandleMouseDown; 
     c.MouseDown += HandleMouseDown; 
     HookupNavigationButtons(c); 
    } 
} 

И называют этот метод где-то после InitializeComponent(); с HookupNavigationButtons(this);

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