在WPF中,在不同的控件上显示验证错误模板

3

我有一个包含其他控件和TextBoxUserControl。它有一个Value属性,该属性绑定到TextBox文本,并将ValidatesOnDataErrors设置为True。

Value属性绑定中发生验证错误时,错误模板(标准红色边框)会显示在整个UserControl周围。

有没有办法只在TextBox周围显示它?我想能够使用任何错误模板,因此仅在文本框周围放置边框并将其颜色或其他内容绑定到Validation.HasError不是选项。

这是我的代码:

<DataTemplate x:Key="TextFieldDataTemplate">
    <c:TextField DisplayName="{Binding Name}" Value="{Binding Value, Mode=TwoWay, ValidatesOnDataErrors=True}"/>
</DataTemplate>

<controls:FieldBase x:Name="root">
<DockPanel DataContext="{Binding ElementName=root}">
    <TextBlock Text="{Binding DisplayName}"/>
    <TextBox x:Name="txtBox"                 
             Text="{Binding Value, Mode=TwoWay, ValidatesOnDataErrors=True}"
             IsReadOnly="{Binding IsReadOnly}"/>
</DockPanel>

UserControl(FieldBase)绑定到执行验证的ModelView。

1个回答

2
为了完成这个任务,我使用了以下解决方案。它使用转换器,通过将(Validation.Errors).CurrentItem转换为Thickness来“隐藏”边框。
<Grid>
    <Grid.Resources>
        <data:ValidationBorderConverter
            x:Key="ValidationBorderConverter" />
    </Grid.Resources>
    <Border
        BorderBrush="#ff0000"
        BorderThickness="{Binding 
            ElementName=myControl, 
            Path=(Validation.Errors).CurrentItem, 
            onverter={StaticResource ValidationBorderConverter}}">
        <TextBox
            ToolTip="{Binding 
                ElementName=myControl, 
                Path=(Validation.Errors).CurrentItem.ErrorContent}" />
    </Border>
</Grid>

ValidationBorderConverter类非常简单:

[ValueConversion(typeof(object), typeof(ValidationError))]
public sealed class ValidationBorderConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, 
            System.Globalization.CultureInfo culture)
    {
        return (value == null) ? new Thickness(0) : new Thickness(1);
    }

    public object ConvertBack(object value, Type targetType, object parameter, 
            System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接