propiedades wpf textbox wpf-controls constraints

wpf - propiedades - Cómo restringir un TextBox



maxlength textbox c# (4)

Cómo configurar un TextBox para obtener solo ciertos valores. por ejemplo, el cuadro de entrada DateTime con configuraciones de formato definidas.


¿Qué hay de usar la Validación de enlace que viene con el Marco de WPF?

Crea una ValidationRule como tal

public class DateFormatValidationRule : ValidationRule { public override ValidationResult Validate(object value, System.Globalization.CultureInfo cultureInfo) { var s = value as string; if (string.IsNullOrEmpty(s)) return new ValidationResult(false, "Field cannot be blank"); var match = Regex.Match(s, @"^/d{2}//d{2}//d{4}$"); if (!match.Success) return new ValidationResult(false, "Field must be in MM/DD/YYYY format"); DateTime date; var canParse = DateTime.TryParse(s, out date); if (!canParse) return new ValidationResult(false, "Field must be a valid datetime value"); return new ValidationResult(true, null); } }

A continuación, agréguelo a su enlace en xaml, así como a un estilo para manejar cuando el campo no sea válido. (También puede usar Validation.ErrorTemplate si está inclinado a cambiar completamente el control.) Este coloca el texto ValidationResult como una información sobre herramientas y el cuadro en rojo.

<TextBox x:Name="tb"> <TextBox.Text> <Binding Path="PropertyThatIsBoundTo" UpdateSourceTrigger="PropertyChanged"> <Binding.ValidationRules> <val:DateFormatValidationRule/> </Binding.ValidationRules> </Binding> </TextBox.Text> <TextBox.Style> <Style TargetType="{x:Type TextBox}"> <Style.Triggers> <Trigger Property="Validation.HasError" Value="true"> <Setter Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Self}, Path=(Validation.Errors)[0].ErrorContent}"/> <Setter Property="Background" Value="Red"/> </Trigger> </Style.Triggers> </Style> </TextBox.Style> </TextBox>

Una recomendación sería tomar el estilo y ponerlo en un diccionario de recursos para que cualquier cuadro de texto que desee tenga la misma apariencia cuando falle su propia validación. Hace que el XAML sea mucho más limpio también.


Intenta usar MaskedTextBox.

Tiene cosas como el formato definido de DateTime, y algunos más.


También puede anular los métodos de entrada en el cuadro de texto y evaluar la entrada en ese punto. Todo depende de tu arquitectura.

Algunos que he anulado antes para este tipo de tarea:

  • OnPreviewTextInput
  • OnTextInput
  • OnPreviewKeyDown

http://www.codeproject.com/KB/WPF/wpfvalidation.aspx

<TextBox Text="{Binding Path=Name}" />

Y una función. Este solo verifica que la cadena tenga contenido. El tuyo será más complejo según el formato exacto que quieras aplicar:

public string Name { get { return _name; } set { _name = value; if (String.IsNullOrEmpty(value)) { throw new ApplicationException("Customer name is mandatory."); } } }