如何使用Key.Down在ListViews之间导航项目

艾伦科技

我的情况如下:

<ListView ItemsSource={Binding TestList}>
    <ListView.ItemTemplate>
        <DataTemplate>
            <Expander Header="{Binding Key, BindingMode=OneWay}">
                <Expander.Content>
                    <ListView ItemsSource={Binding Value}>
                        <ListView.ItemContainerStyle>
                            <Style TargetType = {ListViewItem}>
                                <Setter Property = "IsSelected" Value={Binding IsSelected}/>
                            </Style>
                        </ListView.ItemContainerStyle>
                    </ListView>
                </Expander.Content>
            </Expander>
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

测试清单:

Dictionary<string,ObservableCollection<Test>> TestList;

测试:

class Test : NotificationObject
{
    public string Name { get; set;}

    private bool isSelected;
    public bool IsSelected
    {
        if( value != isSelected )
        {
            isSelected = value;
            RaisePropertyChanged("IsSelected");
        }
    }
}   

内部的ListView SelectionMode是Single,我可以使用键盘上和下按钮浏览ListView中的项目。有没有一种方法可以实现此方案:当焦点位于ListView的最后一项上时,请按向下键,焦点将位于下一个ListView的第一项上;如果焦点位于下一个ListView的最后一项上,则将焦点移到下一个ListView。当焦点位于ListView的第一项上时,按向上键,焦点位于上一个ListView的最后一项。

有人可以帮忙吗?

解决方案

public static List<T> FindVisualChildren<T>(DependencyObject depObj) where T : DependencyObject
        {
            List<T> list = new List<T>();
            if (depObj != null)
            {
                for (int i = 0; i < VisualTreeHelper.GetChildrenCount(depObj); i++)
                {
                    DependencyObject child = VisualTreeHelper.GetChild(depObj, i);
                    if (child != null && child is T)
                    {
                        list.Add((T)child);
                    }

                    List<T> childItems = FindVisualChildren<T>(child);
                    if (childItems != null && childItems.Count() > 0)
                    {
                        foreach (var item in childItems)
                        {
                            list.Add(item);
                        }
                    }
                }
            }
            return list;
        }

        private void ListView_PreviewKeyDown(object sender, KeyEventArgs e)
        {
            ListView currentListView = sender as ListView;

            List<ListView> listviews = FindVisualChildren<ListView>(ModulesListView);

            int currentListViewIndex = listviews.IndexOf(currentListView);

            // If the press key is Down and the selected item is the last one
            if (Keyboard.IsKeyDown(Key.Down)&& currentListView.SelectedIndex + 1 == currentListView.Items.Count)
            {               
                if (currentListViewIndex + 1 < listviews.Count)
                {
                    // Get next ListView
                    var nextListView = listviews.ElementAt(currentListViewIndex + 1);

                    if (nextListView.Items != null && nextListView.Items.Count > 0)
                    {
                        ListViewItem item = nextListView.ItemContainerGenerator.ContainerFromIndex(0) as ListViewItem;
                        item.Focus();
                        item.IsSelected = true;
                        e.Handled = true;
                    }
                }


            }
            else if (Keyboard.IsKeyDown(Key.Up)&& currentListView.SelectedIndex == 0)
            {
                if (currentListViewIndex > 0)
                {
                    var previousListView = listviews.ElementAt(currentListViewIndex - 1);

                    if (previousListView.Items != null && previousListView.Items.Count > 0)
                    {                                              
                        ListViewItem item = previousListView.ItemContainerGenerator.ContainerFromIndex(previousListView.Items.Count - 1) as ListViewItem;
                        item.Focus();
                        item.IsSelected = true;
                        e.Handled = true;
                    }
                }

            }

        }
艾伦科技

这个问题已经解决了!我已将解决方案粘贴到问题下方,希望它可以帮助有相同需求的其他成员,谢谢!

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用Key.Down在ListViews中导航项目

来自分类Dev

如何使用 Xbox 控制器在 ListView 中的多个 GridView 之间导航项目?

来自分类Dev

我可以使用界面在不同项目的ViewModel之间导航吗

来自分类Dev

如何使用phantomjs在页面之间导航

来自分类Dev

如何使用wxPython在多个窗口之间导航?

来自分类Dev

使用导航组件在不同的图形之间导航

来自分类Dev

如何使用AngularJS在视图之间传递项目?

来自分类Dev

使用jQuery在div之间导航

来自分类Dev

使用 StackNavigator 在屏幕之间导航

来自分类Dev

Android-如何使用Espresso单击导航抽屉上的项目?

来自分类Dev

如何在WPF中使用左右键在Tabitem之间导航

来自分类Dev

如何使用SwiftUI中的按钮在视图之间导航?

来自分类Dev

如何使用react-native-navigation在屏幕之间正确导航?

来自分类Dev

如何使用 StackNavigator 在 3 个屏幕之间导航

来自分类Dev

如何使用鼠标滚轮在 UWP 的 xaml 控件之间导航?

来自分类Dev

iOS - 在使用容器视图时如何避免将导航控件放在导航栏项目中

来自分类Dev

如何使用导航器按钮执行除在页面之间导航以外的操作

来自分类Dev

导航抽屉:如何知道当前选中的项目?

来自分类Dev

如何在导航菜单中更改项目

来自分类Dev

如何将导航栏项目居中?

来自分类Dev

如何使导航在我的 UWP 项目中工作?

来自分类Dev

如何在WPF中的窗口之间导航?

来自分类Dev

如何在浮点图上的点之间导航?

来自分类Dev

如何增加导航药靴之间的空间?

来自分类Dev

Aurelia:如何在子路线之间导航

来自分类Dev

如何在UITableViewCell中的UITextField之间导航?

来自分类Dev

如何在PHP中的页面之间导航

来自分类Dev

如何在WPF和WinForms之间导航

来自分类Dev

如何减少导航链接CSS之间的间距

Related 相关文章

  1. 1

    如何使用Key.Down在ListViews中导航项目

  2. 2

    如何使用 Xbox 控制器在 ListView 中的多个 GridView 之间导航项目?

  3. 3

    我可以使用界面在不同项目的ViewModel之间导航吗

  4. 4

    如何使用phantomjs在页面之间导航

  5. 5

    如何使用wxPython在多个窗口之间导航?

  6. 6

    使用导航组件在不同的图形之间导航

  7. 7

    如何使用AngularJS在视图之间传递项目?

  8. 8

    使用jQuery在div之间导航

  9. 9

    使用 StackNavigator 在屏幕之间导航

  10. 10

    Android-如何使用Espresso单击导航抽屉上的项目?

  11. 11

    如何在WPF中使用左右键在Tabitem之间导航

  12. 12

    如何使用SwiftUI中的按钮在视图之间导航?

  13. 13

    如何使用react-native-navigation在屏幕之间正确导航?

  14. 14

    如何使用 StackNavigator 在 3 个屏幕之间导航

  15. 15

    如何使用鼠标滚轮在 UWP 的 xaml 控件之间导航?

  16. 16

    iOS - 在使用容器视图时如何避免将导航控件放在导航栏项目中

  17. 17

    如何使用导航器按钮执行除在页面之间导航以外的操作

  18. 18

    导航抽屉:如何知道当前选中的项目?

  19. 19

    如何在导航菜单中更改项目

  20. 20

    如何将导航栏项目居中?

  21. 21

    如何使导航在我的 UWP 项目中工作?

  22. 22

    如何在WPF中的窗口之间导航?

  23. 23

    如何在浮点图上的点之间导航?

  24. 24

    如何增加导航药靴之间的空间?

  25. 25

    Aurelia:如何在子路线之间导航

  26. 26

    如何在UITableViewCell中的UITextField之间导航?

  27. 27

    如何在PHP中的页面之间导航

  28. 28

    如何在WPF和WinForms之间导航

  29. 29

    如何减少导航链接CSS之间的间距

热门标签

归档