2

我似乎无法弄清楚,因为我似乎无法将我的 ListView 的项目转换为 ListViewItem 类型并调用 ListViewItem.Focus()。以下将不起作用,因为 ListView 的项目属于 LogRecord 类型:

((ListViewItem)listView.Items[0]).Focus();

编辑:我希望滚动条移动到项目所在的位置,基本上,或者更好地说,该项目在用户看到的项目列表中变得可见。

关于如何让我的 ListView 专注于特定项目的任何想法?现在它绑定到一个集合。下面是我设置 ListView 对象的方法:

listView = new ListView();
Grid.SetRow(listView, 1);
grid.Children.Add(listView);
GridView myGridView = new GridView();
// Skipping some code here to set up the GridView columns and such.
listView.View = myGridView;
Binding myBinding = new Binding();
myBinding.Source = PaneDataContext.LogsWrapper;
listView.SetBinding(ItemsControl.ItemsSourceProperty, myBinding);

我绑定到这种数据类型(LogRecord 包含 LogRecord.Message 之类的内容,它对应于网格视图上的 Message 列等;并且代码有效):

        public class LogRecordWrapper : IEnumerable<LogRecord>, INotifyCollectionChanged
        {
            public List<LogRecord> RowList { get; set; }

            public event NotifyCollectionChangedEventHandler CollectionChanged;

            public LogRecordWrapper()
            {
                RowList = new List<LogRecord>();
            }

            protected virtual void OnCollectionChanged(NotifyCollectionChangedEventArgs e)
            {
                if (CollectionChanged != null)
                {
                    CollectionChanged(this, e);
                }
            }

            public void SignalReset()
            {
                OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Reset, null));
            }

            public void Add(LogRecord item)
            {
                RowList.Add(item);
                OnCollectionChanged(new NotifyCollectionChangedEventArgs(NotifyCollectionChangedAction.Add, item));
            }

            public IEnumerator<LogRecord> GetEnumerator()
            {
                return RowList.GetEnumerator();
            }

            System.Collections.IEnumerator System.Collections.IEnumerable.GetEnumerator()
            {
                return GetEnumerator();
            }
        }
4

3 回答 3

1

你能用:

listView.Items[0].Focused = true;

...也许:

listVIew.Items[0].Selected = true;

(我不肯定你追求什么样的“焦点”)

然后结合(或就地使用):

listView.Items[0].EnsureVisible();
于 2013-06-12T14:40:17.920 回答
1

ListView.ScrollIntoView

ListBox.ScrollIntoView 方法

该链接显示 ListBox 但它也适用于 ListView

至于不使用 Focus,请发布您如何使用 ScrollIntoView。

于 2013-06-12T15:46:55.777 回答
0

这真太了不起了!!!!2002 年 5 月 29 日下午 4:53 #1 Jim Guest ListView EnsureVisible 不起作用。有任何想法吗?代码......实际上找到并突出显示选定的项目,它只是没有滚动到它并使其可见。用户被迫滚动到该项目。

2004 年 4 月 4 日,上午 12:07 luchmun 嗨,正在处理表单...一切正常,但问题是,即使我使用 lsitem.ensurevisible 和 listitem.selected = true,当前条目也不会变得可见。

11 年后,它仍然无法正常工作,没有人,甚至微软似乎都不知道为什么?对我有用的答案是 listview1.ensurevisible(itemindex) NOT listview.items(itemindex).ensurevisible

于 2013-12-27T15:16:30.957 回答