c# xaml focus windows-phone-8.1

c# - Aplicación Windows Phone 8.1 XAML. ¿Cómo prevenir el cambio de enfoque automático inapropiado?



focus windows-phone-8.1 (3)

La razón de esto se debe al cambio de índice de Tab del botón al cuadro de texto. Esto es algo muy molesto de WP8.1. No he encontrado una solución "buena" para esto, pero esto podría ser más limpio que su solución actual.

El xaml

<TextBox x:Name="myTextBox" Text="zxczczczczx"/>

La función

private void ButtonBase_OnClick(object sender, RoutedEventArgs e) { myTextBox.IsTabStop = false; Button1.Visibility = Visibility.Collapsed; myTextBox.IsTabStop = true; }

Buena suerte.

Imagine el siguiente marcado de página simple:

<Page x:Class="AutoFocusBug.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <StackPanel> <!--<Button x:Name="FocusHolder" Width="0" Height="0" MinHeight="0" MinWidth="0"/>--> <TextBox Text="zxczczczczx"/> <Button x:Name="Button1" Content="Button1" Click="ButtonBase_OnClick"/> </StackPanel> </Page>

y el siguiente código subyacente:

private void ButtonBase_OnClick(object sender, RoutedEventArgs e) { Button1.Visibility = Visibility.Collapsed; }

Cuando hago clic en el botón Button1 se oculta (lo que se espera y se desea) pero, por algún motivo, TextBox se enfoca automáticamente y aparece el teclado en pantalla. No quiero este enfoque automático inesperado.

Puedo intentar hacer algo con el foco en el controlador Click pero en la aplicación real está implementado con ViewModel con comandos y así sucesivamente y parece un hack sucio (y también aparece el teclado por un período corto incluso si cambio el foco inmediatamente después del botón de ocultación).

El segundo enfoque que encontré es crear un botón "invisible" en algún lugar antes del cuadro de texto (comentó FocusHolder ), que es bastante mejor, pero que tampoco parece una técnica correcta.

Entonces, ¿qué es eso? ¿Es esto algún mecanismo que puedo configurar de alguna manera para "redirigir" el foco del elemento colapsado? O se trata de un error? ¿Cuál es la forma correcta de evitar este enfoque automático no deseado?


Pude resolver este problema al configurar el TabIndex.

Establezca la orden de índice para enfocarse en su segundo control antes del TextBox.

<Page x:Class="AutoFocusBug.MainPage" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"> <StackPanel> <!--<Button x:Name="FocusHolder" Width="0" Height="0" MinHeight="0" MinWidth="0"/>--> <TextBox Text="zxczczczczx" TabIndex="2"/> <Button x:Name="Button1" Content="Button1" Click="ButtonBase_OnClick" TabIndex="1"/> </StackPanel>


Intenta configurar TabNavigation = "Cycle" en el Botón. Esto es trabajo para mí.