2009-09-16 3 views
2

У меня есть стиль для TextBox, чтобы показать сообщение об ошибке проверки следующим образом:WPF Expander все еще показывает Validation Adorner Ошибки при сжалось

<Style TargetType="{x:Type TextBox}"> 
     <Style.Triggers> 
      <Trigger Property="Validation.HasError" Value="true"> 
       <Setter Property="ToolTip" 
         Value="{Binding RelativeSource={x:Static RelativeSource.Self}, 
         Path=(Validation.Errors)[0].ErrorContent}"/> 
      </Trigger> 
     </Style.Triggers> 
     <Setter Property="Validation.ErrorTemplate"> 
      <Setter.Value> 
       <ControlTemplate> 
        <StackPanel Orientation="Horizontal"> 
         <Border BorderBrush="{Binding Path=ErrorContent, 
           Converter={StaticResource ValidationErrorToBrushConverter}}" BorderThickness="2"> 
          <AdornedElementPlaceholder /> 
         </Border> 
         <Image Name="image1" Height="14" Width="14" Stretch="Fill" Margin="1,1,1,1" 
           Source="{Binding Path=ErrorContent, 
           Converter={StaticResource ValidationErrorToImageSourceConverter}}" 
           ToolTip="{Binding Path=ErrorContent}"/> 
        </StackPanel> 
       </ControlTemplate> 
      </Setter.Value> 
     </Setter> 
    </Style> 

The TextBox жизни в Expander. Когда я открываю Expander, TextBox допускает ввод, но не проверяет достоверность, если вход NullorEmpty или содержит специальные символы.

Моя проблема заключается в том, что когда я вызываю ошибку проверки, загорается красный значок TextBox и отображается значок с сообщением в виде всплывающей подсказки. Все хорошо до сих пор. НО, когда я закрываю Expander без прохождения проверки, красный контур и значок с подсказкой все еще там! Даже с Expander сократились! Просто плавает там ... Это нехорошее поведение.

Любые идеи о том, как получить материал проверки, чтобы скрыть все остальные элементы управления в Expander? Кроме того, стиль для проверки объявляется в ресурсах UserControl, а не в Expander.

+0

Check [этот ответ] (http://stackoverflow.com/questions/1471451/wpf-error -template-red-box-still-visible-on-collapse-of-an-expandander/1471733 # 1471733) или [этот ответ] (http://stackoverflow.com/questions/321327/how-do-i-get -rid-of-the-the-red-rectangle-when-my-wpf-binding-validation-has-failed-a/321987 # 321987) для потенциальных решений. Любой из этих двух будет работать для вас. –

ответ

0

В итоге я просто очистил TextBox после закрытия Expander. Таким образом, ошибка проверки исчезнет, ​​и ящик будет очищен и готов к другому входу при открытии расширителя.

0

У меня была та же проблема. Я исправил это, поставив AdornerDecorator в качестве первого дочернего объекта расширителя. AdornerDecorator рушится, когда Expander рухнут, поэтому все равно должны исчезнуть.

0

Я решил эту же проблему, установив Validation.ErrorTemplate свойство нуль, когда TextBox скрыт

<Style TargetType="TextBox"> 
    <Style.Triggers> 
     <Trigger Property="IsHitTestVisible" Value="False"> 
      <Setter Property="Validation.ErrorTemplate" Value="{x:Null}"/> 
     </Trigger> 
    </Style.Triggers> 
</Style>