tecla presionar net evento event ejecutar boton asp silverlight xaml windows-phone-7

silverlight - presionar - La determinación de la tecla Enter se presiona en un TextBox



onkeypress textbox asp net c# (5)

Deshabilitar el teclado

Se enfrentó con el mismo problema; los ejemplos anteriores solo dan detalles sobre cómo atrapar el evento de presionar el teclado (que responde a la pregunta), pero para desactivar el teclado, hacer clic o ingresar, solo tengo el foco establecido en otro control por completo.

Lo cual resultará en deshabilitar el teclado.

private void txtCodeText_KeyDown(object sender, KeyEventArgs e) { if(e.Key.Equals(Key.Enter)) { //setting the focus to different control btnTransmit.Focus(); } }

Considere un XAML TextBox en Win Phone 7.

<TextBox x:Name="UserNumber" />

El objetivo aquí es que cuando el usuario presiona el botón Enter en el teclado en pantalla, se inicia una lógica para actualizar el contenido en la pantalla.

Me gustaría tener un evento planteado específicamente para Enter . es posible?

  • ¿Es el evento específico del TextBox o es un evento de teclado del sistema?
  • ¿Requiere un control para Enter en cada pulsación de tecla? es decir, ¿algo análogo a ASCII 13?
  • ¿Cuál es la mejor manera de codificar este requisito?

Buscará implementar el evento KeyDown específico de ese cuadro de texto y comprobar KeyEventArgs para la clave actual presionada (y si coincide con Key.Enter, hacer algo)

<TextBox Name="Box" InputScope="Text" KeyDown="Box_KeyDown"></TextBox> private void Box_KeyDown(object sender, KeyEventArgs e) { if (e.Key.Equals(Key.Enter)) { //Do something } }

Solo una nota que en la versión Beta del emulador WP7, aunque usando el teclado en pantalla del software detecta la tecla Enter correctamente, si estás usando el teclado de hardware (activado presionando Pausa / Pausa), la tecla Intro parece venir a través de Key.Unknown, o al menos, lo estaba haciendo en mi computadora ...


Si está utilizando el emulador, también puede hacer algo como esto para detectar la tecla Intro desde su teclado físico.

private void textBox1_KeyUp(object sender, KeyEventArgs e) { var isEnterKey = e.Key == System.Windows.Input.Key.Enter || e.PlatformKeyCode == 10; if (isEnterKey) { // ... } }


Si no desea agregar ningún código al código de su XAML detrás del archivo y mantener su diseño limpio desde el punto de arquitectura de MVVM, puede usar el siguiente enfoque. En su XAML defina su comando en el enlace de esta manera:

<TextBox Text="{Binding Text}" custom:KeyUp.Command="{Binding Path=DataContext.DoCommand, ElementName=root}" />

donde la clase KeyUp :

using System.Windows; using System.Windows.Controls; using System.Windows.Input; namespace PhoneGuitarTab.Controls { public static class KeyUp { private static readonly DependencyProperty KeyUpCommandBehaviorProperty = DependencyProperty.RegisterAttached( "KeyUpCommandBehavior", typeof(TextBoxCommandBehavior), typeof(KeyUp), null); /// /// Command to execute on KeyUp event. /// public static readonly DependencyProperty CommandProperty = DependencyProperty.RegisterAttached( "Command", typeof(ICommand), typeof(KeyUp), new PropertyMetadata(OnSetCommandCallback)); /// /// Command parameter to supply on command execution. /// public static readonly DependencyProperty CommandParameterProperty = DependencyProperty.RegisterAttached( "CommandParameter", typeof(object), typeof(KeyUp), new PropertyMetadata(OnSetCommandParameterCallback)); /// /// Sets the to execute on the KeyUp event. /// /// TextBox dependency object to attach command /// Command to attach [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1011:ConsiderPassingBaseTypesAsParameters", Justification = "Only works for buttonbase")] public static void SetCommand(TextBox textBox, ICommand command) { textBox.SetValue(CommandProperty, command); } /// /// Retrieves the attached to the . /// /// TextBox containing the Command dependency property /// The value of the command attached [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1011:ConsiderPassingBaseTypesAsParameters", Justification = "Only works for buttonbase")] public static ICommand GetCommand(TextBox textBox) { return textBox.GetValue(CommandProperty) as ICommand; } /// /// Sets the value for the CommandParameter attached property on the provided . /// /// TextBox to attach CommandParameter /// Parameter value to attach [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1011:ConsiderPassingBaseTypesAsParameters", Justification = "Only works for buttonbase")] public static void SetCommandParameter(TextBox textBox, object parameter) { textBox.SetValue(CommandParameterProperty, parameter); } /// /// Gets the value in CommandParameter attached property on the provided /// /// TextBox that has the CommandParameter /// The value of the property [System.Diagnostics.CodeAnalysis.SuppressMessage("Microsoft.Design", "CA1011:ConsiderPassingBaseTypesAsParameters", Justification = "Only works for buttonbase")] public static object GetCommandParameter(TextBox textBox) { return textBox.GetValue(CommandParameterProperty); } private static void OnSetCommandCallback(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs e) { TextBox textBox = dependencyObject as TextBox; if (textBox != null) { TextBoxCommandBehavior behavior = GetOrCreateBehavior(textBox); behavior.Command = e.NewValue as ICommand; } } private static void OnSetCommandParameterCallback(DependencyObject dependencyObject, DependencyPropertyChangedEventArgs e) { TextBox textBox = dependencyObject as TextBox; if (textBox != null) { TextBoxCommandBehavior behavior = GetOrCreateBehavior(textBox); behavior.CommandParameter = e.NewValue; } } private static TextBoxCommandBehavior GetOrCreateBehavior(TextBox textBox) { TextBoxCommandBehavior behavior = textBox.GetValue(KeyUpCommandBehaviorProperty) as TextBoxCommandBehavior; if (behavior == null) { behavior = new TextBoxCommandBehavior(textBox); textBox.SetValue(KeyUpCommandBehaviorProperty, behavior); } return behavior; } } }

La clase usa otras, así que las proporciono también. Clase TextBoxCommandBehavior :

using System; using System.Windows.Controls; using System.Windows.Input; namespace PhoneGuitarTab.Controls { public class TextBoxCommandBehavior : CommandBehaviorBase { public TextBoxCommandBehavior(TextBox textBoxObject) : base(textBoxObject) { textBoxObject.KeyUp += (s, e) => { string input = (s as TextBox).Text; //TODO validate user input here **//ENTER IS PRESSED!** if ((e.Key == Key.Enter) && (!String.IsNullOrEmpty(input))) { this.CommandParameter = input; ExecuteCommand(); } }; } } }

Clase CommandBehaviorBase :

using System; using System.Windows.Controls; using System.Windows.Input; namespace PhoneGuitarTab.Controls { /// /// Base behavior to handle connecting a to a Command. /// /// The target object must derive from Control /// /// CommandBehaviorBase can be used to provide new behaviors similar to . /// public class CommandBehaviorBase where T : Control { private ICommand command; private object commandParameter; private readonly WeakReference targetObject; private readonly EventHandler commandCanExecuteChangedHandler; /// /// Constructor specifying the target object. /// /// The target object the behavior is attached to. public CommandBehaviorBase(T targetObject) { this.targetObject = new WeakReference(targetObject); this.commandCanExecuteChangedHandler = new EventHandler(this.CommandCanExecuteChanged); } /// /// Corresponding command to be execute and monitored for /// public ICommand Command { get { return command; } set { if (this.command != null) { this.command.CanExecuteChanged -= this.commandCanExecuteChangedHandler; } this.command = value; if (this.command != null) { this.command.CanExecuteChanged += this.commandCanExecuteChangedHandler; UpdateEnabledState(); } } } /// /// The parameter to supply the command during execution /// public object CommandParameter { get { return this.commandParameter; } set { if (this.commandParameter != value) { this.commandParameter = value; this.UpdateEnabledState(); } } } /// /// Object to which this behavior is attached. /// protected T TargetObject { get { return targetObject.Target as T; } } /// /// Updates the target object''s IsEnabled property based on the commands ability to execute. /// protected virtual void UpdateEnabledState() { if (TargetObject == null) { this.Command = null; this.CommandParameter = null; } else if (this.Command != null) { TargetObject.IsEnabled = this.Command.CanExecute(this.CommandParameter); } } private void CommandCanExecuteChanged(object sender, EventArgs e) { this.UpdateEnabledState(); } /// /// Executes the command, if it''s set, providing the /// protected virtual void ExecuteCommand() { if (this.Command != null) { this.Command.Execute(this.CommandParameter); } } } }

Puede encontrar el ejemplo de trabajo en mi proyecto de código abierto (proyecto PhoneGuitarTab.Controls en la solución): http://phoneguitartab.codeplex.com


Un enfoque directo para esto en un cuadro de texto es

private void textBox1_KeyDown(object sender, KeyEventArgs e) { if (e.Key == Key.Enter) { Debug.WriteLine("Enter"); } }