我有一个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/