Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
In diesem Beispiel wird gezeigt, wie ein ErrorTemplate- und ein Stiltrigger verwendet werden, um visuelles Feedback bereitzustellen, um den Benutzer zu informieren, wenn ein ungültiger Wert eingegeben wird, basierend auf einer benutzerdefinierten Validierungsregel.
Beispiel
Der Textinhalt des TextBox folgenden Beispiels ist an die Age
Eigenschaft (vom Typ int) eines Bindungsquellobjekts mit dem Namen ods
gebunden. Die Bindung ist so eingerichtet, dass eine Validierungsregel namens AgeRangeRule
verwendet wird. Wenn der Benutzer nicht-numerische Zeichen oder einen Wert eingibt, der kleiner als 21 oder größer als 130 ist, wird neben dem Textfeld ein rotes Ausrufezeichen angezeigt und eine QuickInfo mit der Fehlermeldung erscheint, wenn der Benutzer die Maus über das Textfeld bewegt.
<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>
Das folgende Beispiel zeigt die Implementierung von AgeRangeRule
, die von ValidationRule erbt und die Validate-Methode überschreibt. Die Int32.Parse
Methode wird für den Wert aufgerufen, um sicherzustellen, dass sie keine ungültigen Zeichen enthält. Die Validate Methode gibt ein ValidationResult , das angibt, ob der Wert gültig ist, basierend darauf, ob eine Ausnahme während der Analyse abgefangen wird und ob sich der Alterswert außerhalb der unteren und oberen Begrenzungen befindet.
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
Das folgende Beispiel zeigt den Benutzerdefinierten ControlTemplatevalidationTemplate
, der ein rotes Ausrufezeichen erstellt, um den Benutzer über einen Überprüfungsfehler zu benachrichtigen. Steuerelementvorlagen werden verwendet, um die Darstellung eines Steuerelements neu zu definieren.
<ControlTemplate x:Key="validationTemplate">
<DockPanel>
<TextBlock Foreground="Red" FontSize="20">!</TextBlock>
<AdornedElementPlaceholder/>
</DockPanel>
</ControlTemplate>
Wie im folgenden Beispiel gezeigt, wird die ToolTip Fehlermeldung mithilfe der Formatvorlage mit dem Namen textBoxInError
erstellt. Wenn HasError den Wert true
hat, setzt der Trigger den Tooltipp des aktuellen TextBox auf den ersten Validierungsfehler. Das RelativeSource ist auf Self festgelegt und bezieht sich auf das aktuelle Element.
<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>
Datenobjekt
Der folgende Codeausschnitt ist das Datenobjekt, das in den vorherigen Codebeispielen verwendet wird. Eine Instanz wird im XAML als statische Ressource mit dem Schlüssel ods
erstellt.
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
Vollständiges Beispiel
Das vollständige Beispiel finden Sie im Beispiel zur Bindungsüberprüfung.
Beachten Sie, dass, wenn Sie keine benutzerdefinierte ErrorTemplate bereitstellen, die Standardfehlervorlage angezeigt wird, um dem Benutzer visuelles Feedback zu geben, wenn ein Überprüfungsfehler auftritt. Weitere Informationen finden Sie unter "Datenüberprüfung" in der Datenbindungsübersicht . Darüber hinaus stellt WPF eine integrierte Gültigkeitsprüfungsregel bereit, mit der Ausnahmen erfasst werden, die während der Aktualisierung der Bindungsquelleigenschaft ausgelöst werden. Weitere Informationen finden Sie unter ExceptionValidationRule.
Siehe auch
.NET Desktop feedback