2012-07-31 22 views
7

¿hay alguna forma de lograr esta funcionalidad desde WinForms en WPF?Establecer elemento de enfoque en ListView WPF

ListView.FocusedItem = ListView.Items[itemToFocusIndex] 

Estoy tratando de establecer manualmente enfoque (no seleccionar) sobre el tema en WPF ListView. Desde System.Windows.Controls. Gracias.

Respuesta

18

Hay dos tipos de enfoque en WPF - foco del teclado y el foco lógico. This link puede darle más información sobre el enfoque en WPF.

Usted puede hacer esto:

ListViewItem item = myListView.ItemContainerGenerator.ContainerFromIndex(index) as ListViewItem; 
item.Focus(); 

También es posible llamar

Keyboard.Focus(item); 

Si también desea desplazar la ListView a la posición del elemento, añadir lo siguiente:

myListView.ScrollIntoView(item); 

NOTA IMPORTANTE: Para que esto funcione k, necesitará configurar VirtualizingStackPanel.IsVirtualizing="False" en su ListView, lo que puede hacer que funcione más lentamente. El motivo por el que se requiere esta propiedad adjunta es que cuando ListView está virtualizado (lo cual es de manera predeterminada), ListViewItems no se crean para elementos que no se muestran en la pantalla, lo que causará ContainerFromIndex() para devolver null.

+0

Bueno, tengo la idea detrás de tu código, pero no funciona como _myListView.Items [itemIndex] como IInputElement; _ devuelve _null_. Los elementos de ListView son instancias de mi clase personalizada y el estilo adecuado se selecciona en tiempo de ejecución de acuerdo con la propiedad del instance. La clase no hereda de implementar ninguna clase o interfaz respectivamente; así que no puedo convertirlo a IInputElement ... – jnovacho

+0

@jnovacho Cualquier control heredado de 'UIElement' implementa' IInputElement'. ¿Qué tipo de objeto obtienes de 'myListView.Items [itemIndex]'? –

+0

Obtengo solo Objeto de esa Colección. – jnovacho

0

Creo que puede usar Keyboard.FocusedElement para obtener el elemento enfocado en la vista de lista.

Keyboard.FocusedElement 

debe devolver el elemento enfocado

+0

No necesito obtener el elemento enfocado, necesito ** configurar ** el foco. – 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

No hay método de Enfoque(). ¡Estoy usando WPF no Forms! – jnovacho

+0

Asegúrese de que su propiedad enfocable esté establecida en verdadero. – Zac

+0

http://msdn.microsoft.com/en-us/library/system.windows.controls.listview.aspx Creo que hay un método Focus(). mira el enlace a mitad de camino bajo los métodos. – Zac

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

Los artículos ListView son elementos UIE, así que simplemente use UIElement.Focus(). por ejemplo, listViewItem.Focus() o button.Focus() y así sucesivamente.

Cuestiones relacionadas