WPF ControlTemplate teilweise ersetzen

8

Angenommen, wir haben eine sehr 'XAML long' ControlTemplate für unsere Control . Und wir möchten der Vorlage nur einen Button hinzufügen . MSDN behauptet, dass Es gibt keine Möglichkeit, nur einen Teil der visuellen Struktur eines Steuerelements zu ersetzen. Muss ich wirklich alle ControlTemplate kopieren und meine Schaltfläche hinzufügen?

Oder: Gibt es eine Möglichkeit, wie man eine Schnittstelle zu einem bestimmten Element bereitstellen kann? Zum Beispiel eine TextBox, damit jeder sie leicht nachbilden kann, ohne das gesamte ControlTemplate wiederholen zu müssen.

Danke!

    
PaN1C_Showt1Me 27.01.2010, 14:38
quelle

3 Antworten

7

Wie qntmfred gesagt hat, können Sie das nicht direkt tun. Wenn Sie jedoch das Steuerelement besitzen, das Sie anpassen möchten (das klingt wie Sie), können Sie dies tun, indem Sie geeignete Anpassungseigenschaften hinzufügen, z. B. eine CustomButtons-Eigenschaft (zu der jeder Benutzer des Steuerelements eigene Schaltflächen hinzufügen kann) ) oder eine ExtensionContent-Eigenschaft (die jeder Benutzer des Steuerelements auf den gewünschten Inhalt setzen kann - lassen Sie es leer, fügen Sie ein einzelnes Steuerelement hinzu oder fügen Sie ein Panel mit beliebig vielen Elementen hinzu). Ihr ControlTemplate würde diesen Eigenschaften keine Semantik zuweisen, sondern sie nur so hosten, wie sie ihm gegeben wurden. Angenommen, Sie haben eine ExtensionContent-Eigenschaft angegeben. Ihr ControlTemplate könnte dies mit einem ContentPresenter darstellen:

%Vor%

Und Ihre Benutzer könnten setzen, was sie wollten:

%Vor%

Eine weitere Möglichkeit besteht darin, Style-Eigenschaften anzugeben, die Sie auf Teile Ihres Steuerelements anwenden, damit Benutzer sie formatieren können (einschließlich Ändern der Vorlage von diesem Teil (nur) des Steuerelements), ohne das gesamte Steuerelement zu ersetzen Stil / Vorlage. Dies ist eine Art Ihrer "Schnittstelle zu einem spezifischen Element" Idee, z. Stellen Sie eine FooBoxStyle-Eigenschaft bereit, die auf die TextBox "foo" angewendet wird.

Kurz gesagt, besteht die Idee darin, ein gewisses Maß an "teilweiser Ersetzbarkeit" in die Basisvorlage zu integrieren - sei es durch Verwendung von Inhalten, Stilen, Vorlagen oder einer Kombination davon. WPF gibt keine allgemeine Vorstellung von "teilweisem Ersatz", aber Sie können Ihre eigene Vorstellung von teilweiser Ersetzbarkeit angeben, vorausgesetzt, Sie können vorhersagen, welche Art von teilweisem Ersatz erforderlich sein könnte.

    
itowlson 29.01.2010, 03:58
quelle
0

MSDN ist korrekt. Muss die gesamte ControlTemplate kopieren.

    
kenwarner 27.01.2010 14:44
quelle
0

Eigentlich kannst du. Es ist nicht die bequemste Methode, aber hier ist, wie Sie es tun: Klonen eines WPF ControlTemplate

    
Siderite 01.12.2010 17:42
quelle

Tags und Links