Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
Ez a példa bemutatja, hogyan használható egy ErrorTemplate és egy stílusindító, amely vizuális visszajelzést ad a felhasználónak, amikor érvénytelen értéket ad meg egy egyéni érvényesítési szabály alapján.
példa
Az alábbi példában szereplő TextBox szöveges tartalma egy Agenevű kötésforrás objektum ods tulajdonságához (int típusú) van kötve. A kötés úgy van beállítva, hogy egy AgeRangeRule nevű érvényesítési szabályt használjon, így ha a felhasználó nem numerikus karaktereket vagy 21-nél kisebb vagy 130-nál kisebb értéket ad meg, a szövegmező mellett piros felkiáltójel jelenik meg, és megjelenik egy hibaüzenetet tartalmazó eszköztipp, amikor a felhasználó az egeret a szövegdoboz fölé helyezi.
<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>
Az alábbi példa a AgeRangeRuleimplementálását mutatja be, amely a ValidationRule-től örököl, és felülbírálja a Validate metódust. A Int32.Parse metódust a rendszer meghívja az értékre annak érdekében, hogy ne tartalmazzon érvénytelen karaktereket. A Validate metódus egy ValidationResult ad vissza, amely azt jelzi, hogy az érték érvényes-e attól függően, hogy kivétel történt-e az elemzés során, és hogy az életkor értéke kívül esik-e az alsó és a felső határon.
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
Az alábbi példa azt az egyéni ControlTemplatevalidationTemplate mutatja, amely piros felkiáltójelet hoz létre, amely értesíti a felhasználót egy érvényesítési hibáról. A vezérlők megjelenését vezérlősablonokkal definiáljuk újra.
<ControlTemplate x:Key="validationTemplate">
<DockPanel>
<TextBlock Foreground="Red" FontSize="20">!</TextBlock>
<AdornedElementPlaceholder/>
</DockPanel>
</ControlTemplate>
Az alábbi példában látható módon a hibaüzenetet megjelenítő ToolTip az textBoxInErrornevű stílussal jön létre. Ha a HasError értéke true, az eseményindító az aktuális TextBox eszköztippjét az első érvényesítési hibára állítja. A RelativeSource az aktuális elemre hivatkozó Selfértékre van állítva.
<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>
Adatobjektum
Az alábbi kódrészlet az előző kódpéldákban használt adatobjektum. A példány a XAML-ben statikus erőforrásként jön létre a odskulcsával.
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
Teljes példa
A teljes példáért lásd kötésérvényesítési minta.
Amennyiben nem ad meg egyéni ErrorTemplate-t, az alapértelmezett hibasablon jelenik meg, amely vizuális visszajelzést nyújt a felhasználónak érvényesítési hiba esetén. Lásd az "Adatérvényesítés" részt a Adatkötés áttekintése-ben további információkért. Emellett a WPF egy beépített érvényesítési szabályt is biztosít, amely a kötés forrástulajdonságának frissítése során fellépő kivételeket rögzíti. További információért lásd ExceptionValidationRule.
Lásd még
.NET Desktop feedback