Nasıl yapılır: Bağlama Doğrulaması Uygulama
Bu örnek ErrorTemplate , bir özel doğrulama kuralına bağlı olarak geçersiz bir değer girildiğinde kullanıcıya bilgilendirmek için görsel geribildirim sağlamak üzere bir ve stil tetikleyicisinin nasıl kullanılacağını gösterir.
Örnek
Aşağıdaki örnekteki öğesinin metin içeriği TextBoxAge adlı bir bağlama kaynak nesnesinin özelliğine (int türünde) bağlanır ods . Bağlama, AgeRangeRule Kullanıcı sayısal olmayan karakterler veya 21 ' den daha küçük bir değer girerse veya 130 ' den büyük bir değer girerse, metin kutusunun yanında kırmızı bir ünlem işareti ve Kullanıcı fareyi metin kutusunun üzerine taşırken hata iletisiyle birlikte bir araç ipucu görünür.
<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>
Aşağıdaki örnek AgeRangeRule , öğesinden devralan ValidationRule ve geçersiz kılacak öğesinin uygulamasını gösterir Validate . Int32.ParseYöntemi, geçersiz karakter içermediğinden emin olmak için değer üzerinde çağrılır. ValidateYöntemi, bir ValidationResult özel durumun ayrıştırma sırasında yakalanıp yakalanmadığını ve yaş değerinin alt ve üst sınırların dışında olup olmadığına bağlı olarak değerin geçerli olup olmadığını belirten bir döndürür.
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
Aşağıdaki örnek, ControlTemplatevalidationTemplate kullanıcıya doğrulama hatası bildirmek için kırmızı bir ünlem işareti oluşturan özel bir gösterir. Denetim şablonları, bir denetimin görünümünü yeniden tanımlamak için kullanılır.
<ControlTemplate x:Key="validationTemplate">
<DockPanel>
<TextBlock Foreground="Red" FontSize="20">!</TextBlock>
<AdornedElementPlaceholder/>
</DockPanel>
</ControlTemplate>
Aşağıdaki örnekte gösterildiği gibi, ToolTip hata iletisini gösteren adlı stil kullanılarak oluşturulur textBoxInError . Değeri HasError ise true , tetikleyici geçerli olan araç ipucunu TextBox ilk doğrulama hatasına ayarlar. , RelativeSourceSelf Geçerli öğeye başvuran olarak ayarlanır.
<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>
Tüm örnek için bkz. bağlama doğrulama örneği.
Özel bir ErrorTemplate doğrulama hatası olduğunda kullanıcıya görsel geri bildirim sağlamak için, özel bir hata şablonu sunmayacağınızı unutmayın. Daha fazla bilgi için veri bağlamaya genel bakış bölümüne bakın. Ayrıca WPF, bağlama kaynağı özelliğinin güncelleştirilmesi sırasında oluşturulan özel durumları yakalayan yerleşik bir doğrulama kuralı sağlar. Daha fazla bilgi için bkz. ExceptionValidationRule.