none
Навигация на странице при помощи движения мыши RRS feed

  • Вопрос

  • Здравствуйте! Программирую в среде Visual Studio 2015 на C# с использованием XAML-конструктора.

    У меня есть контейнер (Grid), размеры которого выходят за рамки экрана. Я могу поместить его в ScrollViewer, и тогда можно будет просмотреть содержимое всех ячеек.

    Подскажите, пожалуйста: можно ли добиться такой прокрутки/навигации по этому Grid (может быть не через ScrollViewer), чтобы навигация происходила не при помощи колесика мыши, а по мере движения курсора мыши, получается, к краям видимой части Grid? То есть по сути эффект навигации походит на управление многими джойстиками, движение курсора определяет направление - куда движется видимая на экране область Grid.

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

    Есть ли иные способы сделать такую навигацию? Может для этого есть контейнер типа ScrollViewer?

    А так спасибо большое всему сообществу, всем тем людям, кто помогает в понимании Visual Studio!

    21 ноября 2021 г. 2:36

Все ответы

  • Здравствуйте.

    Нечто подобное делал (не для Grid и не на C#) лет ...тцать назад. Проще отслеживать курсор мыши не относительно ячеек, а положения на экране. При достижении определенных границ - поменять курсор мыши на соответствующую стрелку (для наглядности) и пока курсор находится в "зоне скроллинга" - менять соответствующую координату позиции Grid'а на количество единиц, достаточное для быстрой, но плавной "прокрутки".


    Alexandr_Smirnoff

    21 ноября 2021 г. 6:50
  • Спасибо, что отвечаете!

    Совершенно логично про отслеживание курсора мыши. Только не знаю даже как определить текущие координаты курсора - не то чтобы задать новые координаты. В интернете нахожу полно команд, начинающихся со слов Cursor типа Cursor.PositionX или System.Drawing, но программа их не воспринимает.

    Для того, чтобы программа их воспринимала нужно скачать какой-нибудь Microsoft Toolkit или что-то в этом роде, не знаете? Или есть иные способы?


    22 ноября 2021 г. 3:51
  • >Только не знаю даже как определить текущие координаты курсора

    using System.Windows.Input;
    
    Mouse.GetPosition(...);


    22 ноября 2021 г. 9:35
  • Здравствуйте!

    Ввел этот using в шапке страницы, все равно не воспринимает Mouse. Там же у меня перечислена using Windows.UI.Xaml.Input - он не подойдет?

    24 ноября 2021 г. 23:45
  • Это значит у вас WinRT/UWP. Это меняет дело, там никакой мыши может и не быть, если программа запускается на устройстве с сенсорным вводом. Пользуйтесь тем, что доступно: событиями типа PointerMoved, PointerPressed.  
    25 ноября 2021 г. 4:29