2009-04-30 16 views
8

¿Alguien puede decirme cómo navegar mediante programación a través de todas las tabulaciones de elemento de UI en una aplicación WPF? Quiero comenzar con la primera pestaña detener olfatear el elemento correspondiente, visitar la siguiente tabulación, olfatear el elemento correspondiente, y así sucesivamente hasta llegar a la última pestaña detener.¿Cómo navegar mediante programación las pestañas de la ficha del elemento UI de WPF?

Gracias, - Mike

Respuesta

27

Usted hace que el uso de MoveFocus como se muestra en este artículo de MSDN que explica todo lo relacionado con el enfoque: Focus Overview.

Aquí hay un código de muestra para llegar al siguiente elemento enfocado (lo obtuve de ese artículo, ligeramente modificado).

// MoveFocus takes a TraversalRequest as its argument. 
TraversalRequest request = new TraversalRequest(FocusNavigationDirection.Next); 

// Gets the element with keyboard focus. 
UIElement elementWithFocus = Keyboard.FocusedElement as UIElement; 

// Change keyboard focus. 
if (elementWithFocus != null) 
{ 
    elementWithFocus.MoveFocus(request); 
} 
+0

genial, muchas gracias! – lamarmora

1

Puede hacerlo con la llamada MoveFocus. Puede obtener el elemento actualmente enfocado a través del FocusManager. El siguiente código repetirá todos los objetos en la ventana y los agregará a una lista. Tenga en cuenta que esto modificará físicamente la ventana al cambiar el foco. Lo más probable es que el código no funcione si la ventana no está activa.

// Select the first element in the window 
this.MoveFocus(new TraversalRequest(FocusNavigationDirection.First)); 

TraversalRequest next = new TraversalRequest(FocusNavigationDirection.Next); 
List<IInputElement> elements = new List<IInputElement>(); 

// Get the current element. 
UIElement currentElement = FocusManager.GetFocusedElement(this) as UIElement; 
while (currentElement != null) 
{ 
    elements.Add(currentElement); 

    // Get the next element. 
    currentElement.MoveFocus(next); 
    currentElement = FocusManager.GetFocusedElement(this) as UIElement; 

    // If we looped (If that is possible), exit. 
    if (elements[0] == currentElement) 
     break; 
} 
+0

El código anterior no funcionaba en mi ventana de WPF. La lista termina siendo vacía. La primera llamada GetFocusedElement() anterior devuelve null. Estoy de acuerdo con que este código coincide exactamente con la documentación, pero desafortunadamente no funcionó para mí. Estoy cavando para descubrir por qué. –

+1

¿Dónde llamas el código? Tenga en cuenta que la ventana debe estar activa para que el constructor esté definitivamente fuera. OnLoad podría funcionar, utilicé Activated, que se llama cada vez que activa la ventana. –

Cuestiones relacionadas