Настройка шаблона ошибки проверки из код в WPF

В моем приложении WPF есть TextBox. Я определил ControlTemplate для ошибки проверки следующим образом:

<ControlTemplate x:Key="validationTemplate">
    <DockPanel LastChildFill="True">
         <TextBlock DockPanel.Dock="Bottom"  Text="Invalid Input: "></TextBlock>
                 <AdornedElementPlaceholder />
    </DockPanel>
</ControlTemplate>

Мой TextBox выглядит следующим образом:

<TextBox Validation.ErrorTemplate="{StaticResource validationTemplate}">                                              
    <TextBox.Text>
        <Binding Path="TEXT1" ValidatesOnDataErrors="True" validatesOnExceptions="True">
         </Binding>
    </TextBox.Text>
</TextBox>

Теперь, если мой TextBox добавлен, ValidationRule, а затем я проверяю там, шаблон ошибки применяется правильно. Но я не могу это сделать из-за другой проблемы.

Поэтому мне нужно проверить содержимое TextBox в PreviewLostKeyboardFocus. Я проверяю TextBox. Теперь я хочу установить шаблон ошибки для TextBox в коде позади, но я не могу это сделать !!

Я пробовал это, но он не работает так, как задумано ::

private void blockTextBox_PreviewLostKeyboardFocus(object sender, KeyboardFocusChangedEventArgs e)
    {
        TextBox txtBox = sender as TextBox;
        txtBox.Template = this.FindResource("validationTemplate") as ControlTemplate;

        //this behaves strange; it removes the TextBox and places the ErrorTemplate. 
       //I want it to behave like the way WPF does internally wherein it places 
       //the error template around TExtBox
    }

Вопрос 1: Я хочу знать, как добавить шаблон ошибки в TextBox

Вопрос 2: Я хочу знать, как мне установить сообщение об ошибке шаблона элемента управления из кода. Например, я хочу изменить сообщение об ошибке по умолчанию «Неверный ввод:» на «Неверный ввод: пожалуйста, введите правильный ввод».

Я хочу делать вышеупомянутые вещи только в коде, стоящем позади !!!!

РЕДАКТИРОВАТЬ 1:

Проблема в том, как установить из кода, стоящего за валидацией. HasError как true, потому что я не использую валидатор. (или что я должен установить из кода, за которым применяется ValidationTemplate ??))

EDIT 2:

Я выполняю привязку XML, поэтому я не могу реализовать IDataErrorInfo !! Я хочу добиться этого только с помощью кода !! Есть ли способ установить Validation.HasError из кода позади ??

10
задан GuruC 25 November 2010 в 12:56
поделиться