2016-01-18 3 views
1

В настоящее время мы пишем приложение GUI с использованием WPF и .Net4.5.Текстовое поле, не отображающее красную ошибку валидации в WPF

Одна из наших страниц содержит TabControl с пользовательскими UserControl с, как TabItem s. Эти UserControl s просто содержат список доступных для редактирования TextBox es. У Textbox es есть пользовательский ValidationRule, который проверяет текст на основе регулярного выражения. Проблема в том, что эти редактируемые текстовые поля привязаны к Properties, которые загружаются при запуске со значениями по умолчанию из текстового файла/базы данных.

Мне нужно, чтобы проверка выполнялась до того, как текстовое поле имеет фокус или до его редактирования, чтобы правильно ввести значения, введенные в текстовый файл/базу данных. В настоящее время, когда я выбираю элемент табуляции, в текстовых полях не отображается красная ошибка проверки, хотя кажется, что проверка правильной работы. Только после того, как я нажимаю элемент с ошибкой Validation, я вижу связанный красный ящик.

Я использую UpdateSourceTrigger="PropertyChanged", и я могу отлаживать и видеть, что код проверки работает в нужное время, но все же красные поля не будут отображаться. Я даже добавил код для повторного запуска событий «Свойства изменен» в связанных свойствах, когда TabItem получает фокус, но это все равно не помогает. Вот пример одного из TextBox х годов, не показывая проверки:

<TextBox x:Name="TextBox1" Margin="10,5,5,5" Width="150" MaxLength="5" Style="{StaticResource ServiceEntryTextBox}"> 
    <TextBox.Text> 
     <Binding Path="TexBox1BoundProperty" Converter="{StaticResource DoubleConverter}" UpdateSourceTrigger="PropertyChanged" ValidatesOnDataErrors="True" ValidatesOnExceptions="True"> 
      <Binding.ValidationRules> 
       <validation:StringRegexFormatValidation RegexPattern="^[0-9]{0,1}.{0,1}[0-9]{1,3}$" ValidatesOnTargetUpdated="True"/> 
      </Binding.ValidationRules> 
     </Binding> 
    </TextBox.Text> 
</TextBox> 

Есть ли другая часть мне не хватает?

+0

[Как выполнить проверку привязки] (https://msdn.microsoft.com/library/ms753962 (v = vs.100) .aspx) – MethodMan

ответ

1

Вы пытаетесь поместить ваш TextBox внутри AdornerDecorator? Мне нужно выкопать источник для этого, но я видел проблемы до того, как элементы управления внутри элемента управления Tab не отображают правильность проверки.

например.

<AdornerDecorator> 
    <TextBox x:Name="TextBox1" Margin="10,5,5,5" Width="150" MaxLength="5" Style="{StaticResource ServiceEntryTextBox}"> 
     <TextBox.Text> 
      <Binding Path="TexBox1BoundProperty" Converter="{StaticResource DoubleConverter}" UpdateSourceTrigger="PropertyChanged" ValidatesOnDataErrors="True" ValidatesOnExceptions="True"> 
       <Binding.ValidationRules> 
        <validation:StringRegexFormatValidation RegexPattern="^[0-9]{0,1}.{0,1}[0-9]{1,3}$" ValidatesOnTargetUpdated="True"/> 
       </Binding.ValidationRules> 
      </Binding> 
     </TextBox.Text> 
    </TextBox> 
</AdornerDecorator> 

Дальнейшая помощь при отладке

Я также видел проблемы при связывании непосредственно к DependencyProperty. Проблема, которую я видел, заключалась в том, что я поднимал INotifyPropertyChanged, чтобы вызвать обработку проверки (которая отлично работала в .NET 4.0), однако с .NET 4.5 вы не можете использовать INotifyPropertyChanged для запуска проверки на DependencyProperty.

Смежные вопросы