2010-01-27 6 views
8

Angenommen, wir haben eine sehr 'XAML long' ControlTemplate für unsere Control. Und wir wollen hinzufügen, nur 1 Button zum Template. 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 meinen Button hinzufügen?WPF ControlTemplate teilweise ersetzen

Oder: Gibt es irgendeine 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!

+0

Warum nicht nur, oh, ich weiß nicht ... fügen Sie die Schaltfläche zu der Vorlage? – Will

+0

Da die Lösung dieses Steuerelement verwendet und jedes Projekt entscheidet, welche Schaltflächen hinzugefügt werden sollen –

Antwort

7

Wie qntmfred gesagt hat, können Sie dies 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 von ihm 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 zugewiesen wurden. Angenommen, Sie haben eine ExtensionContent-Eigenschaft angegeben. Ihre Control könnte präsentieren diese mit einem Content:

<ContentPresenter ContentSource="ExtensionContent" /> 

Und Ihre Nutzer könnten setzen, was sie in ihm wollte:

<s:StefansControl> 
    <s:StefansControl.ExtensionContent> 
    <StackPanel Orientation="Horizontal"> 
     <TextBlock Text="I'm custom content" /> 
     <Button Click="DoSomethingSurprising_Click">Click me</Button> 
     <Image Source="something.jpg" /> 
    </StackPanel> 
    </s:StefansControl.ExtensionContent> 
</s:StefansControl> 

Ein weiterer möglicherweise ist Stileigenschaften zur Verfügung zu stellen, die Sie Teile Ihrer Kontrolle auszuüben, so Diese Benutzer können sie stylen (einschließlich der Änderung der Vorlage , die Teil (nur) des Steuerelements), ohne den gesamten Stil/Vorlage zu ersetzen. 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, die Idee besteht darin, ein gewisses Maß an "teilweiser Ersetzbarkeit" in die Basisvorlage zu integrieren - sei es durch Verwendung von Inhalten, Stilen, Vorlagen oder einer Kombination von diesen. 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.

0

MSDN ist korrekt. Muss das gesamte ControlTemplate kopieren.