更改文本框的默认ValidationRule错误行为

时间:2018-12-12 13:30:42

标签: c# wpf validation xaml controltemplate

我为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>

有人知道我如何改变红色边框的行为吗?

1 个答案:

答案 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中数据验证的更多信息。