Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在WPF中的其他控件上显示验证错误模板_Wpf_Validation_Templates - Fatal编程技术网

在WPF中的其他控件上显示验证错误模板

在WPF中的其他控件上显示验证错误模板,wpf,validation,templates,Wpf,Validation,Templates,我有一个包含其他控件的UserControl,还有一个TextBox。它有一个值属性,该属性绑定到文本框文本,并将验证数据错误设置为True 当值属性绑定中发生验证错误时,错误模板(标准红色边框)将显示在整个用户控件周围 是否有办法仅在文本框中显示它? 我希望能够使用任何错误模板,因此只需在文本框周围加上边框,并将其颜色或其他内容绑定到验证。HasError不是一个选项 这是我的密码: <DataTemplate x:Key="TextFieldDataTemplate">

我有一个包含其他控件的
UserControl
,还有一个
TextBox
。它有一个
属性,该属性绑定到
文本框
文本,并将
验证数据错误
设置为True

属性绑定中发生验证错误时,错误模板(标准红色边框)将显示在整个
用户控件
周围

是否有办法仅在
文本框中显示它?
我希望能够使用任何错误模板,因此只需在文本框周围加上边框,并将其颜色或其他内容绑定到
验证。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绑定。

为了完成此任务,我使用了此解决方案。它使用转换器,通过将(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>
[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();
    }
}