WPF Expander по-прежнему показывает сообщение об ошибке проверки при сокращении - PullRequest
2 голосов
/ 17 сентября 2009

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

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

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

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

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

Ответы [ 3 ]

0 голосов
/ 02 августа 2016

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

0 голосов
/ 06 ноября 2017

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

<Style TargetType="TextBox">
    <Style.Triggers>
        <Trigger Property="IsHitTestVisible" Value="False">
            <Setter Property="Validation.ErrorTemplate" Value="{x:Null}"/>
        </Trigger>
    </Style.Triggers>
</Style>
0 голосов
/ 01 октября 2009

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

...