2012-04-06 7 views

Antwort

2

Sie so etwas wie dies für eine TextBox tun können

<Style x:Key="TextBoxWithValidation" TargetType="{x:Type TextBox}" BasedOn="{StaticResource {x:Type TextBox}}"> 
    <Setter Property="Validation.ErrorTemplate" Value="{StaticResource TextBoxValidationTemplate}"/> 
    <Style.Triggers> 
     <Trigger Property="Validation.HasError" Value="true"> 
      <Setter Property="Background" Value="{StaticResource BackgroundValidationBrush}"/> 
      <Setter 
       Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Mode=Self}, 
       Path=(Validation.Errors)[0].ErrorContent)}" 
      /> 
     </Trigger> 
    </Style.Triggers> 
</Style> 

Wo BackgroundValidationBrush Rosa sagen würde.

Beachten Sie, dass die allgemeine Lösung von Binding ToolTip zu (Validation.Errors) [0] .ErrorContent führt zu vielen Debug spew (Fachbegriff), wenn es keine Fehler gibt, so dass Sie besser mit einem Konverter wie dies:

[ValueConversion(typeof(ReadOnlyObservableCollection<ValidationError>), typeof(string))] 
public class ValidationErrorsToStringConverter : IValueConverter 
{ 
    public object Convert(object value, Type targetType, object parameter, 
     CultureInfo culture) 
    { 
     var errors = value as ReadOnlyObservableCollection<ValidationError>; 

     // If there are no errors then return an empty string. 
     // This prevents debug exception messages that result from the usual Xaml of "Path=(Validation.Errors)[0].ErrorContent". 
     // Instead we use "Path=(Validation.Errors), Converter={StaticResource ValidationErrorsConverter}". 
     if (errors == null) 
     { 
      return string.Empty; 
     } 

     var errors2 = errors.Select(e => e.ErrorContent).OfType<string>().ToArray(); 

     return errors.Any() ? string.Join("\n", errors2) : string.Empty; 
    } 
    public object ConvertBack(object value, Type targetType, object parameter, 
     CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 
} 

und die wir

<converters:ValidationErrorsToStringConverter x:Key="ValidationErrorsConverter"/> 

<!-- Style to be used as the base style for all text boxes --> 
<Style x:Key="TextBoxWithValidation" TargetType="{x:Type TextBox}" BasedOn="{StaticResource {x:Type TextBox}}"> 
    <Setter Property="Validation.ErrorTemplate" Value="{StaticResource TextBoxValidationTemplate}"/> 
    <Style.Triggers> 
     <Trigger Property="Validation.HasError" Value="true"> 
      <Setter Property="Background" Value="{StaticResource BackgroundValidationBrush}"/> 
      <Setter 
       Property="ToolTip" Value="{Binding RelativeSource={RelativeSource Mode=Self}, 
       Path=(Validation.Errors), 
       Converter={StaticResource ValidationErrorsConverter}}" 
      /> 
     </Trigger> 
    </Style.Triggers> 
</Style> 
+0

ich nur sehen eine Fehlermeldung übergeben mein Konverter verwenden können, auch wenn mehr als eine in den ViewModel's.GetErrors existiert („Propertyname“) ... Ideen? – gap

0

Ich glaube, Sie wie die Suche nach etwas

Data Validation

eine Sniplet verwenden:

<Binding.ValidationRules> 
    <DataErrorValidationRule/> 
</Binding.ValidationRules> 

Definieren Sie Ihre Validierungsregeln und im Falle des Scheiterns werden Sie ein rotes Rechteck arround gegeben werden die zugehörige Steuerung.

0

Legen Sie die beigefügte Eigenschaft in Ihrem TextBox Stil fest. (Lesen Sie die Dokumentation für ein Beispiel)

Verwandte Themen