Validation.ErrorTemplate在TextBox顶部显示
时间: 2024-01-21 17:16:46 浏览: 84
Textbox验证控件
要在TextBox顶部显示Validation.ErrorTemplate,可以使用AdornerLayer。在TextBox的AdornerLayer中显示Validation.ErrorTemplate,可以通过以下步骤实现:
1. 首先,为TextBox定义一个AdornerLayer,可以通过以下代码实现:
```csharp
AdornerLayer adornerLayer = AdornerLayer.GetAdornerLayer(textBox);
```
2. 然后,创建一个自定义Adorner类,用于显示Validation.ErrorTemplate。该类应该从Adorner类派生。在该类的构造函数中,将Validation.ErrorTemplate放置在AdornerLayer中。以下是Adorner类的示例代码:
```csharp
public class ErrorAdorner : Adorner
{
private readonly Border _border;
public ErrorAdorner(UIElement adornedElement, object errorContent) : base(adornedElement)
{
_border = new Border()
{
Background = new SolidColorBrush(Colors.Red),
Padding = new Thickness(5),
Child = new ContentPresenter()
{
Content = errorContent,
Foreground = new SolidColorBrush(Colors.White),
}
};
AddVisualChild(_border);
AddLogicalChild(_border);
}
protected override Size ArrangeOverride(Size finalSize)
{
_border.Arrange(new Rect(new Point(0, -_border.ActualHeight), finalSize));
return finalSize;
}
protected override Visual GetVisualChild(int index)
{
return _border;
}
protected override int VisualChildrenCount => 1;
}
```
3. 最后,在TextBox的TextChanged事件中,检查文本是否有效。如果文本无效,则在AdornerLayer中显示Validation.ErrorTemplate。以下是TextChanged事件的示例代码:
```csharp
private void TextBox_TextChanged(object sender, TextChangedEventArgs e)
{
if (Validation.GetHasError((DependencyObject)sender))
{
var adornerLayer = AdornerLayer.GetAdornerLayer((UIElement)sender);
adornerLayer.Add(new ErrorAdorner((UIElement)sender, Validation.GetErrors((DependencyObject)sender)[0].ErrorContent));
}
else
{
var adornerLayer = AdornerLayer.GetAdornerLayer((UIElement)sender);
var adorners = adornerLayer.GetAdorners((UIElement)sender);
if (adorners != null)
{
foreach (var adorner in adorners)
{
adornerLayer.Remove(adorner);
}
}
}
}
```
这样,无效的输入将在TextBox顶部显示Validation.ErrorTemplate。
阅读全文