Лучший отвечающий
Навигация на странице при помощи движения мыши

Вопрос
-
Здравствуйте! Программирую в среде Visual Studio 2015 на C# с использованием XAML-конструктора.
У меня есть контейнер (Grid), размеры которого выходят за рамки экрана. Я могу поместить его в ScrollViewer, и тогда можно будет просмотреть содержимое всех ячеек.
Подскажите, пожалуйста: можно ли добиться такой прокрутки/навигации по этому Grid (может быть не через ScrollViewer), чтобы навигация происходила не при помощи колесика мыши, а по мере движения курсора мыши, получается, к краям видимой части Grid? То есть по сути эффект навигации походит на управление многими джойстиками, движение курсора определяет направление - куда движется видимая на экране область Grid.
Это можно сделать тяжелым путем: определить начальные координаты ячеек и самого Grid, потом при наведении курсором на каждую ячейку сделать событие, которое будет двигать текущие координаты Grid к данной ячейке. В данном случае, становятся трудоемкими расчеты координат и самой "плавности" движения за курсором.
Есть ли иные способы сделать такую навигацию? Может для этого есть контейнер типа ScrollViewer?
А так спасибо большое всему сообществу, всем тем людям, кто помогает в понимании Visual Studio!
21 ноября 2021 г. 2:36
Ответы
-
>Только не знаю даже как определить текущие координаты курсора
using System.Windows.Input; Mouse.GetPosition(...);
- Помечено в качестве ответа Антон Григоренко 2 февраля 2022 г. 20:22
22 ноября 2021 г. 9:35 -
Здравствуйте.
Нечто подобное делал (не для Grid и не на C#) лет ...тцать назад. Проще отслеживать курсор мыши не относительно ячеек, а положения на экране. При достижении определенных границ - поменять курсор мыши на соответствующую стрелку (для наглядности) и пока курсор находится в "зоне скроллинга" - менять соответствующую координату позиции Grid'а на количество единиц, достаточное для быстрой, но плавной "прокрутки".
Alexandr_Smirnoff
- Помечено в качестве ответа Антон Григоренко 2 февраля 2022 г. 20:22
21 ноября 2021 г. 6:50 -
Это значит у вас WinRT/UWP. Это меняет дело, там никакой мыши может и не быть, если программа запускается на устройстве с сенсорным вводом. Пользуйтесь тем, что доступно: событиями типа PointerMoved, PointerPressed.
- Помечено в качестве ответа Антон Григоренко 2 февраля 2022 г. 20:22
25 ноября 2021 г. 4:29
Все ответы
-
Здравствуйте.
Нечто подобное делал (не для Grid и не на C#) лет ...тцать назад. Проще отслеживать курсор мыши не относительно ячеек, а положения на экране. При достижении определенных границ - поменять курсор мыши на соответствующую стрелку (для наглядности) и пока курсор находится в "зоне скроллинга" - менять соответствующую координату позиции Grid'а на количество единиц, достаточное для быстрой, но плавной "прокрутки".
Alexandr_Smirnoff
- Помечено в качестве ответа Антон Григоренко 2 февраля 2022 г. 20:22
21 ноября 2021 г. 6:50 -
Спасибо, что отвечаете!
Совершенно логично про отслеживание курсора мыши. Только не знаю даже как определить текущие координаты курсора - не то чтобы задать новые координаты. В интернете нахожу полно команд, начинающихся со слов Cursor типа Cursor.PositionX или System.Drawing, но программа их не воспринимает.
Для того, чтобы программа их воспринимала нужно скачать какой-нибудь Microsoft Toolkit или что-то в этом роде, не знаете? Или есть иные способы?
- Изменено Антон Григоренко 22 ноября 2021 г. 3:52 Ошибки в словах и дополнение
22 ноября 2021 г. 3:51 -
>Только не знаю даже как определить текущие координаты курсора
using System.Windows.Input; Mouse.GetPosition(...);
- Помечено в качестве ответа Антон Григоренко 2 февраля 2022 г. 20:22
22 ноября 2021 г. 9:35 -
Здравствуйте!
Ввел этот using в шапке страницы, все равно не воспринимает Mouse. Там же у меня перечислена using Windows.UI.Xaml.Input - он не подойдет?
24 ноября 2021 г. 23:45 -
Это значит у вас WinRT/UWP. Это меняет дело, там никакой мыши может и не быть, если программа запускается на устройстве с сенсорным вводом. Пользуйтесь тем, что доступно: событиями типа PointerMoved, PointerPressed.
- Помечено в качестве ответа Антон Григоренко 2 февраля 2022 г. 20:22
25 ноября 2021 г. 4:29