3 Stimmen

Wie wird ein ControlTemplate in XAML instanziiert?

Im Code ein ControlTemplate enthält eine Hierarchie von FrameworkElementFactory die für die Konstruktion der Rahmenelemente selbst verwendet werden können. Aber in XAML kann ein ControlTemplate erscheint der Inhalt als die Elemente selbst.

Konvertiert der XAML-Parser von einer Objektform in die andere, ist ein ValueConverter verwendet, oder werden die Fabriken tatsächlich beim Parsen der ControlTemplate Inhalt?

3voto

CodeNaked Punkte 39375

Es wird tatsächlich anders gemacht, wenn es in XAML und nicht im Code definiert ist. Um dies zu überprüfen, können Sie ein einfaches Projekt in WPF mit einem einzigen Fenster erstellen und ein benutzerdefiniertes Steuerelement hinzufügen, das ein ControlTemplate in XAML durch seinen Standardstil definiert hat. Fügen Sie dann das Steuerelement zu Ihrem Fenster hinzu und fügen Sie eine Schaltfläche hinzu, deren Click-Handler einen Haltepunkt enthält.

Wenn der Haltepunkt erreicht ist, können wir das benutzerdefinierte Steuerelement und sein ControlTemplate untersuchen. Die VisualTree-Eigenschaft (die FrameworkElementFactory ist) ist null.

Mit Reflector können wir den entsprechenden Code in der Methode StyleHelper.ApplyTemplateContent sehen. Die erste if-Anweisung in dieser Methode wendet eine FrameworkElementFactory an (die von der VisualTreeProperty übergeben wird). Die zweite if-Anweisung lädt das ControlTemplate aus XAML, das schließlich FrameworkTEmplate.LoadOptimizedTemplateContent ausführt.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X