如何使用 NumPad 在 WPF C# 中导航列表视图
How to Use NumPad to navigate list view in WPF C#
我正在创建一个 WPF 应用程序,列表视图将从数据库中加载一些订单。由于某些情况,实际使用此应用程序时只能使用 NumPad 键盘。但是,我一直在互联网上搜索,但无法正常工作。
我想做的是使用 NumPad8 和 NumPad2 上下导航列表项。就像普通键盘上的箭头键一样。并在加载列表时将焦点设置在第一项上。
我使用的是MVVM风格,但是如果代码需要放在代码后面也可以。
这是我的 XAML 代码:
<ListView Name="PreparingView" ItemContainerStyle="{StaticResource CenterAlignmentStyle}" Background="Lavender" FontSize="25" Width="450" FontWeight="Bold" ItemsSource="{Binding PreparingList}"
HorizontalAlignment="Left" HorizontalContentAlignment="Left" Foreground="Blue" SelectedValue="{Binding CurrentSelection, Mode=TwoWay}" Margin="10,80,0,180">
<ListView.View>
<GridView ColumnHeaderContainerStyle="{StaticResource noHeaderStyle}">
<GridViewColumn Width="Auto" DisplayMemberBinding="{Binding QNum}"/>
</GridView>
</ListView.View>
</ListView>
如果有人能提供帮助,我将不胜感激。谢谢。
这应该可以满足您的要求:
示例XAML:
<Window x:Class="WpfApp14.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp14"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800" Loaded="Window_Loaded">
<Grid>
<ListView Name="lvTest" KeyDown="lvTest_KeyDown">
<ListView.Items>
<ListViewItem>item 1</ListViewItem>
<ListViewItem>item 2</ListViewItem>
<ListViewItem>item 3</ListViewItem>
<ListViewItem>item 4</ListViewItem>
<ListViewItem>item 5</ListViewItem>
<ListViewItem>item 6</ListViewItem>
<ListViewItem>item7</ListViewItem>
<ListViewItem>item 8</ListViewItem>
</ListView.Items>
</ListView>
</Grid>
</Window>
隐藏代码:
private void lvTest_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.NumPad2)
{
if (lvTest.SelectedIndex < lvTest.Items.Count -1)
{
lvTest.SelectedIndex++;
}
else
{
lvTest.SelectedIndex = 0;
}
}
else if (e.Key == Key.NumPad8)
{
if (lvTest.SelectedIndex > 0)
{
lvTest.SelectedIndex--;
}
else
{
lvTest.SelectedIndex = lvTest.Items.Count - 1;
}
}
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
lvTest.Focus();
lvTest.SelectedIndex = 0;
}
我正在创建一个 WPF 应用程序,列表视图将从数据库中加载一些订单。由于某些情况,实际使用此应用程序时只能使用 NumPad 键盘。但是,我一直在互联网上搜索,但无法正常工作。
我想做的是使用 NumPad8 和 NumPad2 上下导航列表项。就像普通键盘上的箭头键一样。并在加载列表时将焦点设置在第一项上。
我使用的是MVVM风格,但是如果代码需要放在代码后面也可以。
这是我的 XAML 代码:
<ListView Name="PreparingView" ItemContainerStyle="{StaticResource CenterAlignmentStyle}" Background="Lavender" FontSize="25" Width="450" FontWeight="Bold" ItemsSource="{Binding PreparingList}"
HorizontalAlignment="Left" HorizontalContentAlignment="Left" Foreground="Blue" SelectedValue="{Binding CurrentSelection, Mode=TwoWay}" Margin="10,80,0,180">
<ListView.View>
<GridView ColumnHeaderContainerStyle="{StaticResource noHeaderStyle}">
<GridViewColumn Width="Auto" DisplayMemberBinding="{Binding QNum}"/>
</GridView>
</ListView.View>
</ListView>
如果有人能提供帮助,我将不胜感激。谢谢。
这应该可以满足您的要求:
示例XAML:
<Window x:Class="WpfApp14.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:WpfApp14"
mc:Ignorable="d"
Title="MainWindow" Height="450" Width="800" Loaded="Window_Loaded">
<Grid>
<ListView Name="lvTest" KeyDown="lvTest_KeyDown">
<ListView.Items>
<ListViewItem>item 1</ListViewItem>
<ListViewItem>item 2</ListViewItem>
<ListViewItem>item 3</ListViewItem>
<ListViewItem>item 4</ListViewItem>
<ListViewItem>item 5</ListViewItem>
<ListViewItem>item 6</ListViewItem>
<ListViewItem>item7</ListViewItem>
<ListViewItem>item 8</ListViewItem>
</ListView.Items>
</ListView>
</Grid>
</Window>
隐藏代码:
private void lvTest_KeyDown(object sender, KeyEventArgs e)
{
if (e.Key == Key.NumPad2)
{
if (lvTest.SelectedIndex < lvTest.Items.Count -1)
{
lvTest.SelectedIndex++;
}
else
{
lvTest.SelectedIndex = 0;
}
}
else if (e.Key == Key.NumPad8)
{
if (lvTest.SelectedIndex > 0)
{
lvTest.SelectedIndex--;
}
else
{
lvTest.SelectedIndex = lvTest.Items.Count - 1;
}
}
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
lvTest.Focus();
lvTest.SelectedIndex = 0;
}