Я делаю некоторую проверку на DataSource TextBox, которая находится внутри Expander, и обнаружил, что после того, как была вызвана ошибка проверки, если я скрою Expander, красный ящик останется там, где был бы TextBox.
<Expander Header="Blah Blah Blah">
<TextBox Name="TextBox"
Validation.ErrorTemplate="{DynamicResource TextBoxErrorTemplate}"
Text="{Binding Path=Blah,
UpdateSourceTrigger=PropertyChanged,
ValidatesOnDataErrors=True}" />
</Expander>
Я попытался обойти это, связав видимость шаблона ошибок с расширителем, но я думаю, что что-то не так с привязкой.
<local:NotVisibleConverter x:Key="NotVisibleConverter" />
<ControlTemplate x:Key="TextBoxErrorTemplate">
<DockPanel>
<Border BorderBrush="Red" BorderThickness="2"
Visibility="{Binding Path=IsExpanded,
Converter={StaticResource NotVisibleConverter},
RelativeSource={RelativeSource AncestorType=Expander}}" >
<AdornedElementPlaceholder Name="MyAdorner" />
</Border>
</DockPanel>
<ControlTemplate.Triggers>
<Trigger Property="Validation.HasError" Value="true">
<Setter Property="ToolTip"
Value="{Binding RelativeSource={RelativeSource Self},
Path=(Validation.Errors)[0].ErrorContent}"/>
</Trigger>
</ControlTemplate.Triggers>
</ControlTemplate>
Наверное, я поступил не так с моей привязкой, может кто-нибудь вернуть меня в нужное русло? Или кто-нибудь знает другое решение для ErrorTemplate, которое все еще видно при крахе Expander?