Postupy: Implementace ověření připojení
Tento příklad ukazuje, jak použít ErrorTemplate trigger stylu a poskytnout vizuální zpětnou vazbu, která uživatele informuje, když je zadána neplatná hodnota na základě vlastního ověřovacího pravidla.
Příklad
Textový obsah TextBox v následujícím příkladu je vázán na Age
vlastnost (typu int) vazby zdrojového objektu s názvem ods
. Vazba je nastavena tak, aby používala ověřovací pravidlo pojmenované AgeRangeRule
tak, aby pokud uživatel zadal nečíselné znaky nebo hodnotu menší než 21 nebo větší než 130, zobrazí se vedle textového pole červený vykřičník a zobrazí se popis s chybovou zprávou, když uživatel přesune ukazatel myši na textové pole.
<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>
<c:AgeRangeRule Min="21" Max="130"/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
Následující příklad ukazuje implementaci AgeRangeRule
, která dědí z ValidationRule a přepíše metodu Validate . Metoda Int32.Parse
je volána na hodnotu, aby se ujistil, že neobsahuje žádné neplatné znaky. Metoda Validate vrátí ValidationResult hodnotu, která označuje, zda je hodnota platná na základě toho, zda je zachycena výjimka během analýzy a zda je věková hodnota mimo dolní a horní hranice.
public class AgeRangeRule : ValidationRule
{
public int Min { get; set; }
public int Max { get; set; }
public AgeRangeRule()
{
}
public override ValidationResult Validate(object value, CultureInfo cultureInfo)
{
int age = 0;
try
{
if (((string)value).Length > 0)
age = Int32.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
Následující příklad ukazuje vlastní ControlTemplatevalidationTemplate
, který vytvoří červený vykřičník, který uživatele upozorní na chybu ověření. Šablony ovládacích prvků slouží k předefinování vzhledu ovládacího prvku.
<ControlTemplate x:Key="validationTemplate">
<DockPanel>
<TextBlock Foreground="Red" FontSize="20">!</TextBlock>
<AdornedElementPlaceholder/>
</DockPanel>
</ControlTemplate>
Jak je znázorněno v následujícím příkladu, ToolTip zobrazí se chybová zpráva pomocí stylu s názvem textBoxInError
. Pokud je true
hodnotaHasError, trigger nastaví popis aktuálního TextBox prvku na první chybu ověření. Je nastavena RelativeSource na Selfhodnotu odkazující na aktuální prvek.
<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)/ErrorContent}"/>
</Trigger>
</Style.Triggers>
</Style>
Úplný příklad najdete v ukázce ověření vazby.
Všimněte si, že pokud nezadáte vlastní ErrorTemplate výchozí šablonu chyby, zobrazí se uživateli vizuální zpětná vazba, když dojde k chybě ověření. Další informace najdete v tématu Ověření dat v přehledu datových vazeb. WPF také poskytuje integrované ověřovací pravidlo, které zachytává výjimky, které jsou vyvolány během aktualizace zdrojové vlastnosti vazby. Další informace najdete na webu ExceptionValidationRule.
Viz také
.NET Desktop feedback
Váš názor
https://aka.ms/ContentUserFeedback.
Připravujeme: V průběhu roku 2024 budeme postupně vyřazovat problémy z GitHub coby mechanismus zpětné vazby pro obsah a nahrazovat ho novým systémem zpětné vazby. Další informace naleznete v tématu:Odeslat a zobrazit názory pro