我正在开发一个UWP应用程序,其中有几个XAML控件(按钮,文本块,复选框等)。理想情况下,此应用程序的最终用户应该只能使用鼠标轮(这是一种医疗设备用户界面,在显示器顶部只有鼠标滚轮)才能在这些控件之间导航。现在我的问题是,如何强制使用鼠标滚轮作为控件之间导航的主要来源?
更多反馈:
1。现在,当我在Visual Studio中运行应用程序时,我只看到鼠标指针,当然按钮对鼠标单击敏感,但是要启动事件,我必须将鼠标悬停在该元素上并单击。默认情况下,“ MOUSE WHEEL”不起作用,无法浏览和选择控件。
2。当我在树莓派设备上侧面加载该UWP应用程序并在其中运行该应用程序时,在控件之间进行导航的唯一方法是使用附加的键盘(可以使用它来导航和选择控件)。此处重新安装的鼠标轮不起作用。
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和树莓派中)都在三个按钮之间导航。
答案 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);
}
}