Warum würde 'dies.ContentTemplate.FindName' wirft eine InvalidOperationException auf Ihre eigene Vorlage?

Ok... das hat mich ratlos. Ich habe überschrieben OnContentTemplateChanged in meinem UserControl. Ich bin der überprüfung, ob das übergebene Wert für newContentTemplate in der Tat gleich dies.ContentTemplate (es tut), aber wenn ich rufen Sie diese...

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

...es wirft folgende exception...

"Dieser Vorgang ist gültig nur für Elemente, auf die diese Vorlage angewendet wird."

Pro ein Kommentator in einem anderen Zusammenhang die Frage, er sagte, Sie sollen pass in die Inhalte Moderator für die Steuerung, nicht die Steuerung selbst, so dann habe ich versucht, dieses...

var cp = FindVisualChild<ContentPresenter>(this);

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

wo FindVisualChild ist nur eine Hilfsfunktion verwendet, die in MSDN-Beispiel (siehe unten), um die damit verbundenen Inhalte und Moderation. Beim 'cp' gefunden wird, zu wirft den gleichen Fehler. Ich bin ratlos!!

Hier ist der helper-Funktion für die Referenz...

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

InformationsquelleAutor MarqueIV | 2011-04-15
Schreibe einen Kommentar