2010-01-09 5 views
14

Ich arbeite an einem WPF-Projekt, bei dem ich die CheckBox-Steuerung für einige spezielle Operationen überfahren habe. Das funktioniert richtig.So übernehmen Sie eine Steuerungsvorlage

Mein Problem ist, dass die ControlTemplate, die aus dem Thema (shinyred.xaml von Codeplex) angewendet wurde, nicht auf meine übergeordnete Steuerelement angewendet wird. Gibt es eine Möglichkeit, die CheckBoxControlTemplate für die Verwendung von meinem neuen Steuerelement zu erben?

Alle Samples, die ich finden kann, sind auf die Erben der Stil für die CheckBox, aber nichts über die ControlTemplate konzentriert.

Antwort

17

Nein, wie Sie sagten, ist es möglich, einen Stil zu erben, indem Sie die BasedOn Eigenschaft verwenden, aber es ist nicht möglich, eine Vorlage direkt zu "erben". Dies ist jedoch verständlich, was wäre die Semantik der Template-Vererbung? Wie könnte die abgeleitete Vorlage Elemente in der Basisvorlage hinzufügen oder ändern?

Mit Styles ist es durchaus möglich, da man einfach Setters hinzufügen können, Triggers usw. Die einzige Sache, die mit Vorlage Vererbung denkbar möglich wäre Triggers an die Basisvorlage hinzufügt. In diesem Fall müssten Sie jedoch die Elementnamen in der Basisvorlage genau kennen, und eine Änderung des Elementnamens in der Basisvorlage könnte die abgeleitete Komponente beschädigen. Ganz zu schweigen von einem Problem mit der Lesbarkeit, bei dem Sie auf einen Namen in Ihrer abgeleiteten Vorlage verweisen, der irgendwo anders definiert ist.

Verspätete Addition Nachdem all dies gesagt wurde, ist es möglich, Ihr spezielles Problem zu lösen (obwohl ich bezweifle, dass es immer noch deins ist, oder sogar ein Problem). Sie definieren einfach einen Stil für Ihre Kontrolle mit einem Setter für die Template Eigenschaft so:

<Style TargetType="<your type>"> 
    <Setter Property="Template" Value="{StaticResource <existing template resource name>}"/> 
</Style>