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

标签 wpf validation templates

我有一个UserControl,其中包含其他控件和一个TextBox。它有一个绑定(bind)到 TextBox 文本的 Value 属性,并将 ValidatesOnDataErrors 设置为 True。

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

有没有办法仅在 TextBox 周围显示它? 我希望能够使用任何错误模板,因此简单地在文本框周围放置边框并将其颜色或其他内容绑定(bind)到 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) 绑定(bind)到执行验证的 ModelView。

最佳答案

为了完成这项任务,我使用了这个解决方案。它使用转换器,通过将 (Validation.Errors).CurrentItem 转换为厚度来“隐藏”边框。

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

关于wpf - 在 WPF 中的不同控件上显示验证错误模板,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1198342/

相关文章:

c++ - 如何允许模板函数具有 friend(-like) 访问权限?

c++ - 使用 C++03 模拟 Variadic 模板时,我们可以在类中使用不同的代码吗?

wpf - 在 WPF 中突出显示整个 TreeViewItem 行

.net - 使用 ComboBox 的自动完成功能,同时将值限制为列表中的值?

c# - 如果客户端验证失败显示消息?

php - 单选按钮验证器

c# - 如何在表单中模拟按钮按下的视觉效果?

wpf - Windows 8.1 为桌面应用程序分配访问权限

c# - TextBox应该以特定格式显示十六进制文本

c++ - 获取函数的第一个输入类型