我为ControlTemplate
创建了一个自定义TextBoxes
,但是我无法覆盖ValidationRule错误的默认行为。
TextBox
边框变成红色,我找不到在哪里覆盖它。
我想要在ControlTemplate
中做的事情是这样的:
<EventSetter Event="HasError" Handler="TextBox_HasErrors"/>
在我后面的代码中:
private void TextBox_HasErrors(...)
{
//Change few things in my TextBox
}
当我覆盖ControlTemplate
的默认TextBox
时,我拥有这个ScrollViewer x:Name="PART_ContentHost"
,它负责边框着色,但是我不知道如何以及在何处进行更改
实际上我对textBox的用法是这样的:
<TextBox Tag="Email">
<TextBox.Text>
<Binding Path="Email" UpdateSourceTrigger="LostFocus">
<Binding.ValidationRules>
<local:TextBoxEmailValidationRule Domain=".com"/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
</TextBox>
有人知道我如何改变红色边框的行为吗?
答案 0 :(得分:1)
红色边框在控件的默认Validation.ErrorTemplate
中定义。您可以通过将附加属性设置为自定义ControlTemplate
来轻松创建自己的错误模板:
<TextBox Tag="Email">
<TextBox.Text>
<Binding Path="Email" UpdateSourceTrigger="LostFocus">
<Binding.ValidationRules>
<local:TextBoxEmailValidationRule Domain=".com"/>
</Binding.ValidationRules>
</Binding>
</TextBox.Text>
<Validation.ErrorTemplate>
<ControlTemplate>
<StackPanel>
<!-- Placeholder for the TextBox itself -->
<AdornedElementPlaceholder x:Name="textBox"/>
<TextBlock Text="{Binding [0].ErrorContent}" Foreground="Red"/>
</StackPanel>
</ControlTemplate>
</Validation.ErrorTemplate>
</TextBox>
请参阅this博客文章,以获取有关此内容以及WPF中数据验证的更多信息。