2

ListView のアイテムを ListViewItem タイプにキャストして ListViewItem.Focus() を呼び出すことができないように見えるため、理解できないようです。ListView の項目が L​​ogRecord 型であるため、以下は機能しません。

((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 には、グリッド ビューの Message 列に対応する LogRecord.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 に答える
0

これは素晴らしいです!!!!2002 年 5 月 29 日、午後 4 時 53 分 #1 ジム ゲスト ListView EnsureVisible が機能していません。何か案は?コード...実際には、選択したアイテムを見つけて強調表示します。スクロールして表示するだけではありません。ユーザーはアイテムまでスクロールする必要があります。

04-04-2004, 12:07 AM luchmun こんにちは、フォームの作業中です...すべてうまくいきますが、問題は、listitem.selected = true で lstitem.ensurevisible を使用しても、現在のエントリが表示されないことです。

11年経った今でも機能せず、誰も、マイクロソフトでさえもその理由を知っているようには見えませんか? 私にとってうまくいく答えは listview1.ensurevisible(itemindex) NOT listview.items(itemindex).ensurevisible です

于 2013-12-27T15:16:30.957 に答える