2012-07-31 41 views
7

có cách nào để thực hiện chức năng này từ WinForms trong WPF không?Đặt mục Focus trong ListView WPF

ListView.FocusedItem = ListView.Items[itemToFocusIndex] 

Tôi đang cố gắng để tự thiết lập tập trung (không chọn) trên mục trong WPF ListView. Từ System.Windows.Controls. Cảm ơn.

Trả lời

18

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.

+0

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

+0

@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]'? –

+0

Tôi chỉ nhận được đối tượng từ Bộ sưu tập đó. – jnovacho

0

Tôi tin rằng bạn có thể sử dụng Keyboard.FocusedElement để lấy phần tử được tập trung trong chế độ xem danh sách.

Keyboard.FocusedElement 

nên trả lại các yếu tố tập trung

+0

Tôi không cần lấy vật phẩm lấy nét, tôi cần ** đặt tiêu điểm. – jnovacho

0
public void foucusItem(ListView.Item itemToFocusIndex){ 
     int count = 0; 
     foreach(ListView.Item item in YourListView){ 
       if(item == itemsToFocusIndex){ 
        ListView.Items[count].Focus(); 
        return; 
       } 
     count++; 
     } 
    } 
+0

Không có phương thức Focus(). Tôi đang sử dụng WPF không phải hình thức! – jnovacho

+0

Đảm bảo rằng thuộc tính Tập trung của nó được đặt thành true. – Zac

+0

http://msdn.microsoft.com/en-us/library/system.windows.controls.listview.aspx Tôi nghĩ rằng có một phương pháp Focus(). nhìn vào liên kết khoảng một nửa xuống dưới phương pháp. – Zac

0
//to set focus write 
CollistView7.Items[TheIndItem].Selected = true; 
CollistView7.Select(); 
CollistView7.Items[TheIndItem].Focused = true; 
//when TheIndItem is the index 
0

Mục ListView là UIElements, vì vậy chỉ cần sử dụng UIElement.Focus(). ví dụ: listViewItem.Focus() hoặc button.Focus() v.v.

Các vấn đề liên quan