【问题标题】:WPF: Navigating and selecting a ListView item with keyboardWPF:使用键盘导航和选择 ListView 项目
【发布时间】:2017-08-20 09:59:21
【问题描述】:

我有一个 WPF 桌面应用程序,其中包含一些项目的 ListView。

我希望在使用鼠标单击某个项目或使用键盘选择该项目并且用户单击“Enter”时收到通知。 所需的行为类似于现代 Windows 10 UI 上的“设置”)或右侧项目的行为

SelectionChanged 对我不起作用,因为当用户使用键盘导航时,我只想在他们单击“Enter”时执行一个操作。

有这样做的标准方法吗?我可以捕捉到按键/鼠标事件,但这似乎是一个可疑的解决方案。

【问题讨论】:

    标签: wpf listview accessibility keyboard-navigation


    【解决方案1】:

    有标准的方法吗?

    没有。您所描述的不是标准行为。

    由于ListView中的一个项目实际上是在您按下键盘上的上下键时选择的(不按ENTER),所以除了处理一个键和一个鼠标事件我别无选择害怕。

    但这应该是一件很容易实现的事情。例如,您可以处理 ListViewPreviewKeyDown 事件和 ListViewItem 容器的 PreviewMouseLeftButtonDown 事件。

    请参考以下示例代码。

    <ListView x:Name="lv" PreviewKeyDown="lv_PreviewKeyDown">
        <ListView.ItemContainerStyle>
            <Style TargetType="ListViewItem">
                <EventSetter Event="PreviewMouseLeftButtonDown" Handler="lv_PreviewMouseLeftButtonDown" />
            </Style>
        </ListView.ItemContainerStyle>
    </ListView>
    

    public MainWindow()
    {
        InitializeComponent();
        lv.ItemsSource = new List<string> { "1", "2", "3" };
    }
    
    private void lv_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        MessageBox.Show((sender as ListViewItem).DataContext.ToString());
    }
    
    private void lv_PreviewKeyDown(object sender, KeyEventArgs e)
    {
        if (e.Key == Key.Enter)
        {
            MessageBox.Show(lv.SelectedItem.ToString());
        }
    }
    

    实现一些自定义行为并不“可疑”:)

    【讨论】:

    • 谢谢。我怀疑应该有一个内置的实现来做到这一点,因为 Windows 本身有类似的行为(在现代 UI 中,正如我所提到的)。
    • 设置应用程序是一个 UWP 应用程序,它肯定没有使用 WPF ListView 控件。所以不,你必须自己实现这个功能。
    • UWP 没问题,但“检查”工具显示它有一个 ListView 类。是另一个吗?
    猜你喜欢
    • 2011-01-17
    • 2013-09-06
    • 2012-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-10
    • 2018-04-28
    • 2011-02-28
    相关资源
    最近更新 更多