Có hai loại tập trung trong WPF - Bàn phím Focus và Focus logic. This link có thể cung cấp cho bạn thêm thông tin về trọng tâm trong WPF.
Bạn có thể làm điều này:
ListViewItem item = myListView.ItemContainerGenerator.ContainerFromIndex(index) as ListViewItem;
item.Focus();
Cũng có thể gọi
Keyboard.Focus(item);
Nếu bạn cũng muốn di chuyển các ListView
đến vị trí của mặt hàng, thêm này:
myListView.ScrollIntoView(item);
LƯU Ý QUAN TRỌNG: Vì điều này để lo lắng k, bạn sẽ cần phải đặt VirtualizingStackPanel.IsVirtualizing="False"
trên ListView
, điều này có thể khiến nó hoạt động chậm hơn. Lý do thuộc tính đính kèm này là bắt buộc khi ListView
được ảo hóa (theo mặc định), ListViewItems
không được tạo cho các mục không được hiển thị trên màn hình, điều này sẽ gây ra ContainerFromIndex()
để trả về null
.
Nguồn
2012-07-31 19:37:07
Tôi cũng có ý tưởng đằng sau mã của bạn, nhưng nó không hoạt động như _myListView.Items [itemIndex] như IInputElement; _ trả về _null_. Các mục trong ListView là các thể hiện của lớp tùy chỉnh của tôi và kiểu thích hợp được chọn trong thời gian chạy theo thuộc tính instace. Lớp không kế thừa thực hiện bất kỳ lớp hoặc giao diện nào tương ứng; vì vậy tôi không thể truyền nó đến IInputElement ... – jnovacho
@jnovacho Bất kỳ điều khiển nào được thừa kế từ 'UIElement' thực hiện' IInputElement'. Bạn nhận được loại đối tượng nào từ 'myListView.Items [itemIndex]'? –
Tôi chỉ nhận được đối tượng từ Bộ sưu tập đó. – jnovacho