Estilos de erro do WPF somente sendo renderizados corretamente na guia visível de um controle de guia

Eu tenho um objeto de dados usado para conter meus dados de interface do usuário que suportaINotifyPropertyChanged eIDataErrorInfo. Originalmente, eu tinha todos os controles de interface do usuário exibidos em um grande aplicativo do WPF e estava feliz em ver erros sinalizados por meio desse estilo personalizado:

    <!-- Set error style for textboxes -->
    <Style x:Key="txtBoxErrStyle" 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>
                    <DockPanel DockPanel.Dock="Right">
                        <AdornedElementPlaceholder />
                        <Image Source="Error.png"
                                   Height="16"
                                   Width="16"
                                   ToolTip="{Binding Path=AdornedElement.ToolTip, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Adorner}}}" />
                    </DockPanel>
                </ControlTemplate>
            </Setter.Value>
        </Setter>
    </Style>

Eu estava reorganizando o programa hoje e decidi distribuir os vários controles da interface do usuário em várias páginas de umTabControl. O layout da estrutura que estou usando para isso é:

<tabcontrol>
    <tabitem>
        <AdornerDecorator>
           [.. various Stack Panels, Groups and UI controls moved from original layout ..]
        </AdornerDecorator>
    </tabItem>
    <tabitem>
        <AdornerDecorator>
           [.. various Stack Panels, Groups and UI controls moved from original layout ..]
        </AdornerDecorator>
    </tabItem>

    ...
 </tabcontrol>

(Eu estou usando oAdornerDecorator Como eu tinha experimentado em um programa anterior, o estilo de erro não estava sendo renderizado novamente ao trocar as guias. Não me lembro onde vi isso, mas me ajudou.

Agora, quando eu começo o meu programa, o estilo de erro processa corretamenteTabItem que está aberto quando o programa inicia, mas não processa corretamente no outro (oculto)TabItems. Quando seleciono (e revelo) um dessesTabItems a ponta da ferramenta do estilo de erro está definida, mas a imagem do ícone de erro não é exibida.

Também testei a remoção do estilo personalizado e reverti para o estilo de erro padrão do WPF para caixas de texto e ainda obtenho um comportamento semelhante, ou seja, nenhuma caixa vermelha ao redor do controle na caixa de texto.TabItems que estão escondidos quando o programa é aberto.

Então, parece que estou totalmente perdendo algo que está impedindo os estilos de erro de renderizar corretamente em outro que não seja a aba aberta Item. Alguma ideia?

Editar 3 de setembro Descrição alterada para apoiar uma melhor compreensão do que vi

Fale sobre o Déjà vu em 2014

É novembro de 2014 e hoje eu tive esse problema estúpido do WPF com modelos de erro não aparecendo nos itens apresentados em um controlador de guias. Algo no fundo da minha mente sugere que eu já vi esse problema antes. Então eu pesquiso no Google, e a primeira coisa que aparece é a minha própria pergunta de 2009!

Desta vez eu vejo o comentário do dkl que foi adicionado depois que eu resolvi as coisas da última vez. Então eu tentei do jeito dele e usei essa solução (que funcionou bem e eu não precisei polvilhar um controle Adorner sobre meus controles de abas):

<Style x:Key="TextBoxErrorStyle" TargetType="TextBox">
    <Style.Triggers>
        <MultiTrigger>
            <MultiTrigger.Conditions>
                <Condition Property="Validation.HasError" Value="True" />
                <Condition Property="IsVisible" Value="True" />
            </MultiTrigger.Conditions>
            <Setter Property="Validation.ErrorTemplate">
                <Setter.Value>
                    <ControlTemplate>
                        <DockPanel LastChildFill="True">
                            <TextBlock  DockPanel.Dock="Right" 
                                Foreground="Red"
                                FontSize="14pt" 
                                 Margin="-15,0,0,0" FontWeight="Bold">*
                            </TextBlock>
                            <Border BorderBrush="Red" BorderThickness="2">
                                <AdornedElementPlaceholder Name="controlWithError"/>
                            </Border>
                        </DockPanel>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
            <Setter Property="ToolTip" 
                    Value="{Binding RelativeSource={x:Static RelativeSource.Self}, Path=(Validation.Errors).CurrentItem.ErrorContent}" />
        </MultiTrigger>
    </Style.Triggers>
</Style>

questionAnswers(3)

yourAnswerToTheQuestion