首先是我的验证模板
<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,验证模板装饰器就可见...