Как перемещаться между элементами управления xaml UWP с помощью колесика мыши? - PullRequest
0 голосов
/ 26 октября 2018

Я занимаюсь разработкой приложения UWP, в котором у меня есть несколько элементов управления XAML (кнопки, текстовые блоки, флажки и т. Д.). В идеале конечный пользователь этого приложения должен иметь возможность перемещаться между этими элементами управления ТОЛЬКО С ИСПОЛЬЗОВАНИЕМ КОЛЕСА МЫШИ (это пользовательский интерфейс медицинского устройства, в котором на мониторе будет доступно только колесо мыши). Теперь мой вопрос заключается в том, как заставить это приложение использовать колесо мыши в качестве основного источника навигации между элементами управления?

Еще несколько отзывов:

1. Прямо сейчас, когда я запускаю свое приложение в visual studio, я просто вижу указатель мыши и, конечно же, кнопки чувствительны к щелчкам мыши, но чтобы инициировать событие, мне нужно навести курсор на этот элемент и щелкнуть. Колесо мыши не работает по умолчанию для навигации и выбора элементов управления.

2. Когда я загружаю это приложение UWP на устройство raspberry pi и запускаю его там, единственный способ перемещаться между элементами управления - это использовать подключенную клавиатуру (можно перемещаться и выбирать элементы управления, используя ее). СНОВА ПРИКРЕПЛЕННОЕ КОЛЕСО МЫШИ НЕ РАБОТАЕТ ЗДЕСЬ.

  1. Пример элементов управления, которые я использую в своем коде:

код xaml:

<Button x:Name="button1" Grid.Column="0" Grid.Row="0" Content="Button1" Click="button1_click" />

 <Button x:Name="button2" Grid.Column="1" Grid.Row="0" Content="Button2" Click="button2_click" />

 <Button x:Name="button3" Grid.Column="2" Grid.Row="0" Content="Button3" Click="button3_click" />

c # код:

private void button1_click(object sender, Windows.UI.Xaml.RoutedEventArgs e)
{
//do sth
}
 private void button2_click(object sender, Windows.UI.Xaml.RoutedEventArgs e)
{
//do sth
}
 private void button3_click(object sender, Windows.UI.Xaml.RoutedEventArgs e)
{
//do sth
}

в приведенном выше коде невозможно перемещаться между тремя кнопками с помощью колесика мыши (как в visual studio, так и в raspberry pi).

Ответы [ 2 ]

0 голосов
/ 30 октября 2018

ВНОВЬ ПОДКЛЮЧЕННОЕ КОЛЕСО МЫШИ НЕ РАБОТАЕТ ЗДЕСЬ.

Как вы зарегистрировали событие «МЫШЕ КОЛЕСО» в своем коде?Это хорошо с моей стороны.

Пожалуйста, посмотрите следующий пример кода:

<StackPanel x:Name="root" >
    <Button x:Name="button1"  Grid.Column="0" Grid.Row="0" Content="Button1" Click="button1_click" />

    <Button x:Name="button2"  Grid.Column="1" Grid.Row="0" Content="Button2" Click="button2_click" />

    <Button x:Name="button3"  Grid.Column="2" Grid.Row="0" Content="Button3" Click="button3_click" />
</StackPanel>
public MainPage()
{
    this.InitializeComponent();
    Window.Current.CoreWindow.PointerWheelChanged += CoreWindow_PointerWheelChanged;
}

private async void CoreWindow_PointerWheelChanged(Windows.UI.Core.CoreWindow sender, Windows.UI.Core.PointerEventArgs args)
{
    Debug.WriteLine(args.CurrentPoint.Properties.MouseWheelDelta);
    UIElement element;
    if (args.CurrentPoint.Properties.MouseWheelDelta > 0)
    {
        element = FocusManager.FindNextFocusableElement(FocusNavigationDirection.Up);
        if (element == null)
        {
            element = FocusManager.FindLastFocusableElement(root) as UIElement;
        }
        var result = await FocusManager.TryFocusAsync(element, FocusState.Keyboard);
        Debug.WriteLine((element as Button).Content.ToString() + " focused: " + result.Succeeded);
    }
    else
    {
        element = FocusManager.FindNextFocusableElement(FocusNavigationDirection.Down);
        if (element == null)
        {
            element = FocusManager.FindFirstFocusableElement(root) as UIElement;
        }
        var result = await FocusManager.TryFocusAsync(element, FocusState.Keyboard);
        Debug.WriteLine((element as Button).Content.ToString() + " focused: " + result.Succeeded);
    }

}
0 голосов
/ 26 октября 2018

просто чтобы дать вам идею.Сначала вы должны обработать свойства tabIndex всех этих элементов в форме и установить их порядок.Кроме того, то, что вызывается вами, будет перемещаться с вкладкой в ​​вашем случае, когда колесо мыши будет «Focused» или «GotFocus».поэтому будет необходимо событие типа «GotFocus».также вам нужно обрабатывать движения колесика мыши (вверх или вниз).вы можете узнать о том, как переопределить свойство TabIndex из вкладки Key to Mouse wheel, как вы хотите.

...