- Artículo
notas
La vista de escritura a mano no es compatible con los controles de texto en elSDK de aplicación de Windows. Este artículo solo se aplica a las aplicaciones para UWP.
Personaliza la pantalla de escritura a mano (para escribir con tinta en el texto) integrada en los controles de entrada de texto de UWP, comoCaja de texto,RichEditBoxetAutoSuggestBox.
Descripción general
Los controles de entrada de texto de UWP admiten entrada de lápizusando tinta de Windowstransformándose en una superficie de escritura a mano cuando un usuario presiona un cuadro de entrada de texto con un lápiz óptico.
El texto se reconoce cuando el usuario escribe en cualquier parte de la superficie de escritura a mano mientras una ventana de candidato muestra los resultados del reconocimiento. El usuario puede presionar un resultado para elegirlo o continuar escribiendo para aceptar el candidato propuesto. Los resultados del reconocimiento literal (letra por letra) se incluyen en la ventana del candidato, por lo que el reconocimiento no se limita a las palabras de un diccionario. A medida que el usuario escribe, la entrada de texto aceptada se convierte en una fuente de script que conserva la apariencia de la escritura natural.
notas
La vista de escritura a mano está habilitada de forma predeterminada, pero puede deshabilitarla para cada control y restaurar el panel de entrada de texto en su lugar.
Un usuario puede editar su texto usando gestos y acciones estándar:
- barrerotachar: dibuje una línea para borrar una palabra o parte de una palabra
- unirse: dibuje un arco entre las palabras para eliminar el espacio entre ellas
- insertar: dibuje un acento circunflejo para insertar un espacio
- reemplazar: sobrescribe el texto existente para reemplazarlo
Deshabilitar la vista de escritura a mano
La vista de escritura a mano integrada está habilitada de forma predeterminada.
Es posible que desee desactivar la vista de escritura a mano si ya proporciona una funcionalidad equivalente de escritura a mano en texto en su aplicación, o si su experiencia de entrada de texto depende de algún tipo de actualización. disponible de puño y letra.
En este ejemplo, deshabilitamos la vista de escritura a mano configurando la propiedadIsHandwritingViewEnabledcontrolCaja de textoa falso Todos los controles de texto que admiten la vista de escritura a mano aceptan una propiedad similar.
cuadro de texto>
Especificar la alineación de la vista de escritura a mano
La vista de escritura a mano se ubica sobre el control de texto subyacente y tiene un tamaño que se adapta a las preferencias de escritura a mano del usuario (verConfiguración -> Bluetooth y dispositivos -> Pluma y tinta de Windows -> Escritura a mano -> Tamaño de fuente). La vista también se alinea automáticamente en relación con el control de texto y su ubicación dentro de la aplicación.
La interfaz de usuario de la aplicación no se redistribuye para admitir el control más grande, lo que puede obstruir la interfaz de usuario importante.
El siguiente fragmento de código muestra cómo usar la propiedadColocaciónAlineaciónde unoCaja de textoEscritura a manoVerpara especificar el ancla en el control de texto subyacente utilizado para alinear la vista de escritura a mano.
Deshabilitar candidatos de autocompletar
La ventana emergente de sugerencia de texto está habilitada de forma predeterminada. Proporciona una lista de los principales candidatos de reconocimiento de escritura a mano entre los que el usuario puede seleccionar en caso de que el candidato principal sea incorrecto.
Si su aplicación ya proporciona una funcionalidad de reconocimiento robusta y personalizada, puede usar la propiedad¿Están los candidatos habilitados?para desactivar las sugerencias en línea, como se muestra en el siguiente ejemplo.
Usar preferencias de fuente de escritura a mano
Un usuario puede elegir entre una colección predefinida de fuentes basadas en escritura a mano para usar al representar texto basado en el reconocimiento de escritura a mano (verConfiguración -> Bluetooth y dispositivos -> Pluma y tinta de Windows -> Escritura a mano -> Fuente).
Su aplicación puede acceder a esta configuración y usar la fuente seleccionada para el texto reconocido en el control de texto.
En este ejemplo, estamos escuchando el evento.TextoCambiadode unozona de textoy aplicar la fuente seleccionada por el usuario si el cambio de texto es deEscritura a manoVer(o una fuente predeterminada, si no).
privado void SampleTextBox_TextChanged(objeto remitente, TextChangedEventArgs e){ ((TextBox)remitente).FontFamily = ((TextBox)remitente).HandwritingView.IsOpen ? nueva FontFamily(PenAndInkSettings.GetDefault().FontFamilyName): nueva FontFamily("Segoe UI");}
Acceso a HandwritingView en controles compuestos
Controles compuestos que usan el controlCaja de textooRichEditBox(comoAutoSuggestBox), también admiten unaEscritura a manoVer.
Para acceder a laEscritura a manoVeren un control compuesto, utilice la APIVisual Tree Helper.
El siguiente fragmento de código XAML muestra un controlAutoSuggestBox.
En el código subyacente correspondiente mostramos cómo deshabilitar elEscritura a manoVeren controlAutoSuggestBox.
Primero, gestionamos el evento.Cargadodel elemento y llamar a
FindInnerTextBox
función para iniciar el recorrido del árbol visual.privado void SampleAutoSuggestBox_Loaded(objeto remitente, RoutedEventArgs e){ if (FindInnerTextBox((AutoSuggestBox)sender)) autoSuggestInnerTextBox.IsHandwritingViewEnabled = false;}
En la
FindInnerTextBox
función, iteramos a través del árbol visual (comenzando con un autoSuggestBox) llamando a unBuscarNiñoVisualPorNombre
función.private bool FindInnerTextBox(AutoSuggestBox autoSuggestBox){ if (autoSuggestInnerTextBox == null) { // Almacene en caché el cuadro de texto para evitar varios recorridos de árboles. autoSuggestInnerTextBox = (TextBox)FindVisualChildByName
(autoSuggestBox); } return (autoSuggestInnerTextBox != null);}``` Finalmente, el
BuscarNiñoVisualPorNombre
itera a través del árbol visual hasta que elzona de textoser recuperadoprivate FrameworkElement FindVisualChildByName
(DependencyObject obj){ FrameworkElement element = null; int childrenCount = VisualTreeHelper.GetChildrenCount(obj); for (int i = 0; (i < childrenCount) && (element == null); i++) { FrameworkElement child = (FrameworkElement)VisualTreeHelper.GetChild(obj, i); if ((child.GetType()).Equals(typeof(T)) || (child.GetType().GetTypeInfo() .IsSubclassOf(typeof(T)))) { elemento = child; } else { element = FindVisualChildByName (child); } } return (elemento);}`` `
Cambiar la posición de la vista de escritura a mano
En algunos casos, debe asegurarse de que elEscritura a manoVercubre elementos de la interfaz de usuario que de otro modo no estarían cubiertos.
Aquí estamos creando un cuadro de texto que admite dictado (implementado al colocar un cuadro de texto y un botón de dictado en un StackPanel).
Dado que StackPanel ahora es más grande que textBox,le HandwritingViewno puede obstruir todo el control compuesto.
Para resolver este problema, establezca la propiedad PlacementTarget delEscritura a manoVerel elemento de la interfaz de usuario con el que debe alinearse.
Cambiar el tamaño de la vista de escritura a mano
También puede establecer el tamaño de laEscritura a manoVer, que puede ser útil cuando necesita asegurarse de que la vista no oculte elementos importantes de la interfaz de usuario.
Como en el ejemplo anterior, creamos un TextBox que admita dictado (implementado al colocar un TextBox y un botón de dictado en un StackPanel).
En este caso, cambiaremos el tamaño de HandwritingView para que el botón de dictado sea visible.
Para hacer esto, vinculamos la propiedad MaxWidth delEscritura a manoVeral ancho del elemento de la interfaz de usuario que debe ocultar.
Cambiar la posición de la interfaz de usuario personalizada
Si tiene una interfaz de usuario personalizada que aparece en respuesta a la entrada de texto, como una ventana emergente de información, es posible que deba cambiar la posición de esa interfaz de usuario para que no oculte la vista de la escritura a mano.
El siguiente ejemplo muestra cómo escuchar eventosAbrió,CerradoetTamañoCambiadodeEscritura a manoVerpara definir la posición de unSurgir.
private void Search_HandwritingViewOpened( HandwritingView remitente, HandwritingPanelOpenedEventArgs args){ UpdatePopupPositionForHandwritingView();}private void Search_HandwritingViewClosed( HandwritingView remitente, HandwritingPanelClosedEventArgs args){ UpdatePopupPositionForHandwritingView();}private void Search_HandwritingViewS izeChanged( objeto remitente, SizeChangedEventArgs e){ UpdatePopupPositionForHandwritingView();}private void UpdatePopupPositionForHandwritingView(){if (CustomSuggestionUI.IsOpen) CustomSuggestionUI.VerticalOffset = GetPopupVerticalOffset();}private double GetPopupVerticalOffset(){ if ( SearchTextBox.HandwritingView.IsOpen) return (SearchTextBox.Margin.Top + SearchTextBox.HandwritingView.ActualHeight); else return (SearchTextBox.Margin.Top + SearchTextBox.ActualHeight); }
Nueva plantilla del control HandwritingView
Al igual que con todos los controles del marco XAML, puede personalizar la estructura visual y el comportamiento visual de unEscritura a manoVersegún sus necesidades específicas.
Para ver un ejemplo completo de creación de una plantilla personalizada, consulte el procedimientoCrear controles de transporte personalizadoso ejemploControl de edición personalizado.