Nasıl yapılır: Bağlama Doğrulaması Uygulama
Bu örnekte, özel doğrulama ErrorTemplate kuralına göre geçersiz bir değer girildiğinde kullanıcıya bilgi vermek üzere görsel geri bildirim sağlamak için ve stil tetikleyicisinin nasıl kullanılacağı gösterilmektedir.
Örnek
Aşağıdaki örnekte öğesinin TextBox metin içeriği, adlı ods
bağlama kaynak nesnesinin Age
özelliğine (int türünde) bağlıdır. Bağlama, adlı AgeRangeRule
bir doğrulama kuralı kullanacak şekilde ayarlanır, böylece kullanıcı sayısal olmayan karakterler veya 21'den küçük veya 130'dan büyük bir değer girerse, metin kutusunun yanında kırmızı bir ünlem işareti görünür ve kullanıcı fareyi metin kutusunun üzerine getirince hata iletisini içeren bir araç ipucu görüntülenir.
<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, yöntemini devralan ValidationRule ve geçersiz kılan Validate uygulamasını AgeRangeRule
gösterir. yöntemi Int32.Parse
, geçersiz karakter içermediğinden emin olmak için değerde çağrılır. yöntemi, Validate ayrıştırma sırasında bir özel durumun yakalanıp yakalanmadığına 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ı gösteren bir ValidationResult 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, kullanıcıya doğrulama hatası bildirmek için kırmızı bir ünlem işareti oluşturan özel ControlTemplatevalidationTemplate
öğeyi gösterir. Denetim şablonları, 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ı textBoxInError
stil kullanılarak oluşturulur. değeri HasError ise true
tetikleyici, geçerlinin TextBox araç ipucunu ilk doğrulama hatasına ayarlar. RelativeSource, geçerli öğeye Selfbaş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>
Tam örnek için bkz . Bağlama Doğrulama örneği.
Özel ErrorTemplate bir hata sağlamazsanız, doğrulama hatası olduğunda kullanıcıya görsel geri bildirim sağlamak için varsayılan hata şablonunun göründüğünü unutmayın. Daha fazla bilgi için Bkz. Veri Bağlamaya Genel Bakış'ta "Veri Doğrulama". Ayrıca WPF, bağlama kaynak özelliğinin güncelleştirmesi sırasında oluşturulan özel durumları yakalayan yerleşik bir doğrulama kuralı sağlar. Daha fazla bilgi için bkz. ExceptionValidationRule.
Ayrıca bkz.
.NET Desktop feedback
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin