出现错误时,如何设置样式?

时间:2012-04-06 19:17:13

标签: c# wpf xaml data-binding validation

有时我会看到当绑定出现错误输入时,控件周围会出现红色边框。我该如何修改它或在哪里?如果有可能,请举个例子。

提前致谢。

3 个答案:

答案 0 :(得分:2)

您可以为TextBox

执行类似的操作
<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>

其中BackgroundValidationBrush会说Pink。

请注意,将ToolTip绑定到(Validation.Errors)[0] .ErrorContent的常见解决方案会在没有错误的情况下产生大量的调试(技术术语),所以最好使用这样的转换器:

[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();
    }
}

我们可以使用

<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>

答案 1 :(得分:0)

我认为你在寻找像

这样的东西

Data Validation

可以使用小册子:

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

定义验证规则,如果失败,您将获得一个红色矩形 绕过相关的控制。

答案 2 :(得分:0)

TextBox样式设置附加属性Validaton.ErrorTemplate。 (参见文档中的示例)