Изменить поведение ошибки ValidationRule по умолчанию для TextBox - PullRequest
0 голосов
/ 12 декабря 2018

Я создал пользовательский 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 голосов
/ 12 декабря 2018

Красная граница определяется по умолчанию 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>

Пожалуйста, обратитесь к этому сообщению в блоге для получения дополнительной информации об этом и проверки данных вWPF в целом.

...