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>

如果有人可以提供帮助,我真的很感激。谢谢你。

4

1 回答 1

1

这应该做你想要的:

示例 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;
}
于 2018-10-11T21:34:33.693 回答