如何强制关注Windows 10应用程序(UWP)的XAML ListView

本文关键字:UWP XAML ListView 应用程序 何强制 Windows | 更新日期: 2023-09-27 18:12:15

我有一个pivot控件,我使用ItemSource属性传递数据。我还使用了一个数据模板来填充数据透视项。

数据模板中有一个listview。

<DataTemplate ..... >
<ListView ....></ListView>
</DataTemplate>

我正在尝试将键盘事件附加到页面中的ListView。比如用主键向上滚动,用结束键向下滚动。

由于ListView在DataTemplate中,我无法在编译时连接键盘事件。

克服这个问题的方法:

在Xaml控件中使用KeyDown属性
Result: Too much delay for the event to trigger
2)使用VisualTree
Result: Traversing creates lot of overhead.
3)使用ListView加载事件
Result: Called only once

目前最佳解决方案:

1)为ListView的GotFocus属性附加键盘事件。

但是我想在页面加载时强制关注Listview。此外,当我更改pivot项目时,它应该自动强制聚焦在新的ListView上。

如何强制关注Windows 10应用程序(UWP)的XAML ListView

你可以在DataTemplate中为ListViews共享一个事件处理程序。然后使用事件的发送器来获取触发事件的ListView实例。

从那个发送器,你可以做你想做的。例如,如果我共享LoadedEvent,我会尝试这样做:

private void ListView_OnLoaded(object sender, RoutedEventArgs e)
    {
        var lv = sender as ListView;
        if(lv != null)
            lv.SelectedIndex = 0;
    }

请注意,这可能不能按原样工作,所以一定要彻底测试它,以确保它可以满足您的需要。这是一个快速的方法。

如果你坚持严格的MVVM模式,另一个选择是使用一个属性(依赖或类似),并使用一个OneTime x:Bind到ListView的SelectedIndex。我还没有测试过这种方法,但是这个想法应该可以工作,因为您可以为所有的listview绑定相同的属性。