¿Por qué 'this.ContentTemplate.FindName' arrojará una InvalidOperationException en su propia plantilla?

Ok ... esto me tiene perplejo. He anulado OnContentTemplateChanged en mi UserControl. Estoy comprobando que el valor pasado para newContentTemplate de hecho es igual a esto.ContentTemplate (lo hace) todavía cuando llamo a esto ...

var textBox = this.ContentTemplate.FindName("EditTextBox", this);

... arroja la siguiente excepción ...

"Esta operación es válida solo en elementos que tienen esta plantilla aplicada".

Por un comentarista en otra pregunta relacionada, dijo que se supone que debes pasar al presentador de contenido para el control, no el control en sí mismo, así que intenté esto ...

var cp = FindVisualChild<ContentPresenter>(this);

var textBox = this.ContentTemplate.FindName("EditTextBox", cp);

where FindVisualChild es solo una función auxiliar utilizada en el ejemplo de MSDN (ver más abajo) para encontrar el presentador de contenido asociado. Mientras se encuentra 'cp', también arroja el mismo error. ¡¡Estoy perplejo!

Aquí está la función auxiliar para referencia ...

private childItem FindVisualChild<childItem>(DependencyObject obj)
    where childItem : DependencyObject
{
    for(int i = 0 ; i < VisualTreeHelper.GetChildrenCount(obj) ; i++)
    {
        DependencyObject child = VisualTreeHelper.GetChild(obj, i);
        if(child != null && child is childItem)
            return (childItem)child;
        else
        {
            childItem childOfChild = FindVisualChild<childItem>(child);
            if(childOfChild != null)
                return childOfChild;
        }
    }
    return null;
}

M

Respuestas a la pregunta(3)

Su respuesta a la pregunta