如何使用鼠标滚轮在UWP的xaml控件之间导航?

时间:2018-10-26 11:54:45

标签: c# xaml uwp mouseevent mousewheel

我正在开发一个UWP应用程序,其中有几个XAML控件(按钮,文本块,复选框等)。理想情况下,此应用程序的最终用户应该只能使用鼠标轮(这是一种医疗设备用户界面,在显示器顶部只有鼠标滚轮)才能在这些控件之间导航。现在我的问题是,如何强制使用鼠标滚轮作为控件之间导航的主要来源?

更多反馈:

1。现在,当我在Visual Studio中运行应用程序时,我只看到鼠标指针,当然按钮对鼠标单击敏感,但是要启动事件,我必须将鼠标悬停在该元素上并单击。默认情况下,“ MOUSE WHEEL”不起作用,无法浏览和选择控件。

2。当我在树莓派设备上侧面加载该UWP应用程序并在其中运行该应用程序时,在控件之间进行导航的唯一方法是使用附加的键盘(可以使用它来导航和选择控件)。此处重新安装的鼠标轮不起作用。

  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和树莓派中)都在三个按钮之间导航。

2 个答案:

答案 0 :(得分:0)

只是给你一个主意。 首先,您应该处理表单上所有这些Item的tabIndex属性,并设置其顺序。此外,触发的操作将随鼠标滚轮一起随选项卡一起移动,将成为“关注”或“ GotFocus”方法。因此将需要类似“ GotFocus”的事件。您还需要处理鼠标滚轮的移动(向上或向下)。您可能会在Google上找到有关如何根据需要覆盖Tab键到Mouse wheel的TabIndex属性的信息。

答案 1 :(得分:0)

  

此处未重新安装鼠标轮子。

您如何在代码中注册“ MOUSE WHEEL”事件?在我这边效果很好。

请参见以下代码示例:

<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);
    }

}