2

我有一种样式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缩小了!只是漂浮在那里......这不是好的行为。

关于如何让验证内容与所有其他控件一起隐藏的任何想法Expander?此外,用于验证的 Style 是在 UserControl 的资源中声明的,而不是在其Expander本身中。

4

3 回答 3

0

我最终只是在关闭扩展器时清除了文本框。这样,验证错误就消失了,并且当展开器重新打开时,该框是清晰的并准备好进行另一个输入。

于 2009-09-30T21:06:18.073 回答
0

我有同样的问题。我通过将 AdornerDecorator 作为扩展器的第一个子对象来修复它。当 Expander 折叠时 AdornerDecorator 也折叠起来,所以 Adorner 也应该全部消失。

于 2016-08-01T21:02:13.417 回答
0

我通过Validation.ErrorTemplate在 TextBox 隐藏时将属性设置为 null解决了同样的问题

<Style TargetType="TextBox">
    <Style.Triggers>
        <Trigger Property="IsHitTestVisible" Value="False">
            <Setter Property="Validation.ErrorTemplate" Value="{x:Null}"/>
        </Trigger>
    </Style.Triggers>
</Style>
于 2017-11-06T17:17:48.730 回答