Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En este ejemplo se muestra cómo usar un ErrorTemplate y un desencadenador de estilo que proporciona comentarios visuales para informar al usuario cuando se introduce un valor no válido, en función de una regla de validación personalizada.
Ejemplo
El contenido de texto de TextBox en el ejemplo siguiente está vinculado a la propiedad Age
(de tipo int) de un objeto de origen de enlace denominado ods
. La vinculación se configura para usar una regla de validación denominada AgeRangeRule
de modo que si el usuario escribe caracteres no numéricos o un valor menor que 21 o mayor que 130, aparezca un signo de exclamación rojo junto al cuadro de texto y se muestre un mensaje emergente con el mensaje de error cuando el usuario mueve el ratón sobre el cuadro de texto.
<TextBox Name="textBox1" Width="50" FontSize="15"
Validation.ErrorTemplate="{StaticResource validationTemplate}"
Style="{StaticResource textBoxInError}"
Grid.Row="1" Grid.Column="1" Margin="2">
<TextBox.Text>
<Binding Path="Age" Source="{StaticResource ods}"
UpdateSourceTrigger="PropertyChanged" >
<Binding.ValidationRules>
<local:AgeRangeRule Min="21" Max="130"/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
En el ejemplo siguiente se muestra la implementación de AgeRangeRule
, que hereda de ValidationRule e invalida el Validate método . Se llama al método Int32.Parse
en el valor para asegurar que no contiene caracteres no válidos. El Validate método devuelve un ValidationResult valor que indica si el valor es válido en función de si se detecta una excepción durante el análisis y si el valor de antigüedad está fuera de los límites inferiores y superiores.
public class AgeRangeRule : ValidationRule
{
public int Min { get; set; }
public int Max { get; set; }
public override ValidationResult Validate(object value, CultureInfo cultureInfo)
{
int age = 0;
try
{
if (((string)value).Length > 0)
age = int.Parse((String)value);
}
catch (Exception e)
{
return new ValidationResult(false, $"Illegal characters or {e.Message}");
}
if ((age < Min) || (age > Max))
{
return new ValidationResult(false,
$"Please enter an age in the range: {Min}-{Max}.");
}
return ValidationResult.ValidResult;
}
}
Public Class AgeRangeRule
Inherits ValidationRule
' Properties
Public Property Max As Integer
Public Property Min As Integer
' Methods
Public Overrides Function Validate(value As Object, cultureInfo As CultureInfo) As ValidationResult
Dim num1 As Integer = 0
Try
If (CStr(value).Length > 0) Then
num1 = Integer.Parse(CStr(value))
End If
Catch exception1 As Exception
Return New ValidationResult(False, $"Illegal characters or {exception1.Message}")
End Try
If ((num1 < Min) OrElse (num1 > Max)) Then
Return New ValidationResult(False, $"Please enter an age in the range: {Min}-{Max}.")
End If
Return ValidationResult.ValidResult
End Function
End Class
En el ejemplo siguiente se muestra el personalizado ControlTemplatevalidationTemplate
que crea una marca de exclamación roja para notificar al usuario un error de validación. Las plantillas de control se usan para redefinir la apariencia de un control.
<ControlTemplate x:Key="validationTemplate">
<DockPanel>
<TextBlock Foreground="Red" FontSize="20">!</TextBlock>
<AdornedElementPlaceholder/>
</DockPanel>
</ControlTemplate>
Como se muestra en el ejemplo siguiente, el ToolTip que muestra el mensaje de error se crea con el estilo denominado textBoxInError
. Si el valor de HasError es true
, el desencadenador establece la información sobre herramientas del actual TextBox en su primer error de validación.
RelativeSource se establece en Self, que hace referencia al elemento actual.
<Style x:Key="textBoxInError" TargetType="{x:Type TextBox}">
<Style.Triggers>
<Trigger Property="Validation.HasError" Value="true">
<Setter Property="ToolTip"
Value="{Binding RelativeSource={x:Static RelativeSource.Self},
Path=(Validation.Errors)[0].ErrorContent}"/>
</Trigger>
</Style.Triggers>
</Style>
Objeto de datos
El fragmento de código siguiente es el objeto de datos usado en los ejemplos de código anteriores. Se crea una instancia en xaml como un recurso estático con la clave de ods
:
public class MyDataSource
{
public MyDataSource()
{
Age = 0;
Age2 = 0;
}
public int Age { get; set; }
public int Age2 { get; set; }
public int Age3 { get; set; }
}
Public Class MyDataSource
Public Sub New()
Me.Age = 0
Me.Age2 = 0
End Sub
Public Property Age As Integer
Public Property Age2 As Integer
Public Property Age3 As Integer
End Class
Ejemplo completo
Para obtener el ejemplo completo, consulte Ejemplo de validación de enlace.
Tenga en cuenta que, si no proporciona un ErrorTemplate personalizado, la plantilla de error predeterminada aparece para proporcionar retroalimentación visual al usuario cuando se produce un error de validación. Consulte "Validación de datos" en Descripción general del enlace de datos para obtener más información. Además, WPF proporciona una regla de validación integrada que detecta las excepciones que se producen durante la actualización de la propiedad de origen de enlace. Para obtener más información, consulte ExceptionValidationRule.
Consulte también
.NET Desktop feedback