1

首先是我的验证模板

<ControlTemplate x:Key="ValidationTemplate" >
    <Grid>
        <AdornedElementPlaceholder Name="MyAdornedElement" />
        <Path x:Name="path"  Margin="-2,-2,0,0" Data="M 0,10 L 10,0 L 0,0 Z" Fill="{StaticResource BrushError}" StrokeThickness="2" Stroke="White" 
               Visibility="{Binding ElementName=MyAdornedElement,Path=AdornedElement.Visibility}"
               ToolTip="{Binding ElementName=MyAdornedElement,Path=AdornedElement.(Validation.Errors).CurrentItem.ErrorContent}"/>
    </Grid>
</ControlTemplate>

和我的文本框风格

<Style x:Key="{x:Type TextBox}" TargetType="{x:Type TextBox}">
    <Setter Property="Validation.ErrorTemplate" Value="{StaticResource ValidationTemplate}"/>
    <Setter Property="UndoLimit" Value="0"/>
    <Style.Triggers>
        <Trigger Property="IsKeyboardFocused" Value="true">
            <Setter Property="BorderThickness" Value="{StaticResource IsFocusBorderThickness}"/>
            <Setter Property="BorderBrush" Value="{StaticResource IsFocusBorderBrush}"/>
        </Trigger>
        <Trigger Property="IsEnabled" Value="false">
            <Setter Property="Foreground" Value="{StaticResource IsDisabledForegroundBrush}"/>
        </Trigger>
        <Trigger Property="Validation.HasError" Value="true">
            <Setter Property="ToolTip" Value="{Binding Path=(Validation.Errors).CurrentItem.ErrorContent, RelativeSource={x:Static RelativeSource.Self}}"/>
        </Trigger>
    </Style.Triggers>
</Style>

现在神秘的行为

我有一个带有 2 个标签页的 tabcontrol,每个页面都包含文本框。如果我打开我的视图并从第一个标签页移到第二个标签页,然后按下验证按钮 - 一切都很好,我的验证模板会显示在两个标签页上的所有文本框中。

但是当我只是打开视图而不导航到标签页 2 时 - 然后按下验证按钮 - 只有标签页 1 上的文本框显示了验证模板。甚至当我再次点击验证模板上的按钮时,它不会显示在标签页 2 上。

任何提示我错过了什么?

编辑:如果我使用 snoop 并在 snoop treeview 上走到标签页 2 上的文本框,那么只要我单击 Snoop Treeview 中的 TextBox,验证模板装饰器就可见...

4

1 回答 1

1

如果我将以下内容添加到我的文本框样式中,它会起作用。

 <Trigger Property="IsVisible" Value="false">
            <Setter Property="Validation.ErrorTemplate" Value="{x:Null}"/>
        </Trigger>
        <Trigger Property="IsVisible" Value="true">
            <Setter Property="Validation.ErrorTemplate" Value="{StaticResource ValidationTemplate}"/>
 </Trigger>
于 2013-10-21T10:52:18.960 回答