Los estilos de error de WPF solo se representan correctamente en la pestaña visible de un control de pestaña

Tengo un objeto de datos utilizado para contener mis datos de interfaz de usuario que admiteINotifyPropertyChanged yIDataErrorInfo. Originalmente tenía todos los controles de la interfaz de usuario en una gran aplicación WPF y estaba felizmente viendo los errores marcados a través de este 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>

Hoy estaba reorganizando el programa y decidí distribuir los diversos controles de UI en varias páginas de unTabControl. El diseño de la estructura que estoy usando para esto es:

<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>

(Estoy usando elAdornerDecorator Como había experimentado en un programa anterior, el estilo de error no se vuelve a representar cuando se intercambian páginas de pestañas. No recuerdo dónde vi esto, pero me ayudó.)

Ahora cuando comienzo mi programa, el estilo de error se reproduce correctamente en elTabItem que está abierto cuando se inicia el programa, pero no se procesa correctamente en el otro (oculto)TabItems. Cuando selecciono (y revelo) uno de esosTabItems se establece la información sobre herramientas del estilo de error, pero no se muestra la imagen del icono de error.

También probé la eliminación del estilo personalizado y volví al estilo de error de WPF predeterminado para los cuadros de texto y todavía tengo un comportamiento similar, es decir, no hay un cuadro rojo alrededor del control en elTabItems que están ocultos cuando el programa se abre.

Por lo tanto, parece que me estoy perdiendo por completo algo que impide que los estilos de error se representen correctamente en otro elemento que no sea la pestaña abierta. ¿Algunas ideas?

Editar sep 3 Se modificó la descripción para comprender mejor lo que he visto.

Hablamos de Déjà vu en 2014

Es noviembre de 2014 y hoy tuve este estúpido problema de WPF con plantillas de error que no aparecían en los elementos presentados en un controlador de pestañas. Algo en el fondo de mi mente sugiere que he visto este problema antes. Así que busco en Google, ¡y lo primero que aparece es mi propia pregunta del 2009!

Esta vez veo el comentario de dkl que se agregó después de que resolví las cosas la última vez. Así que lo intenté a su manera y usé esta solución (que funcionó bien y no tuve que rociar un control Adorner sobre mis controles de pestañas):

<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>

Respuestas a la pregunta(3)

Su respuesta a la pregunta