Frage

Was ist der Unterschied zwischen diesen zwei Bindungen:

<ControlTemplate TargetType="{x:Type Button}">
   <Border BorderBrush="{TemplateBinding Property=Background}">
      <ContentPresenter />
   </Border>
</ControlTemplate>

und

<ControlTemplate TargetType="{x:Type Button}">
   <Border BorderBrush="{Binding RelativeSource={RelativeSource TemplatedParent}, Path=Background}">
      <ContentPresenter />
   </Border>
</ControlTemplate>

War es hilfreich?

Lösung

Template ist nicht ganz dasselbe. MSDN-Dokumentation wird oft von Leuten geschrieben, die einsilbig SDE über Software-Features Quiz haben, so dass die Nuancen sind nicht ganz richtig.

TemplateBindings werden bei der Kompilierung gegen den in der Steuervorlage angegebenen Typen ausgewertet. Dies ermöglicht eine wesentlich schnellere Instanziierung von kompilierten Vorlagen. fummeln Sie einfach den Namen in einem Template und Sie werden sehen, dass der Compiler-Flag es.

Die Bindung Markup wird zur Laufzeit aufgelöst. Während langsamer ausgeführt werden, wird die Bindungseigenschaft Namen auflösen, die auf dem Typ von der Vorlage erklärt nicht sichtbar sind. Durch langsamer, werde ich darauf hinweisen, dass seine Art von relativ, da dem Bindevorgang dauert sehr wenig von der CPU der Anwendung. Wenn Sie die Kontrolle Vorlagen Sprengung wurden um bei hoher Geschwindigkeit könnten Sie es bemerken.

Als eine Frage der Praxis die Template verwenden, wenn Sie können, aber nicht die Bindung fürchten.

Andere Tipps

Template - Mehr als Begrenzung mit regulärem Binding

  • Effizienter als eine Bindung, aber es hat weniger Funktionen
  • Dies funktioniert nur innerhalb eines visuellen Struktur des Control
  • Ist mit Eigenschaften auf Freezables nicht funktionieren
  • Funktioniert nicht innerhalb einer Control der Trigger-
  • eine Verknüpfung Stellt Eigenschaften in Einstellung (nicht so ausführlich), z. {} Templatetarget

Regular Bindung - verfügt nicht über Grenzen der Template

  • Respektiert Geordnete Eigenschaften
  • Resets Zielwerte keine explizit Werte löschen
  • Beispiel:

Eine weitere Sache - TemplateBindings nicht zulassen Wert zu konvertieren. Sie erlauben nicht, dass Sie einen Konverter passieren und nicht automatisch int String zum Beispiel konvertieren (die für ein normales sind Binding).

Template ist eine Abkürzung für mit TemplatedParent Bindung aber es funktioniert das Gerät nicht alle Funktionen der Binding-Klasse, zum Beispiel nicht Binding.Mode von Template steuern kann.

Relative TemplatedParent

Dieser Modus ermöglicht eine gegebene Eigenschaft Control auf eine Eigenschaft des Steuer binden, dass die Control angewendet wird. Um auch die Frage zu verstehen, hier ist ein Beispiel unten

<Window.Resources>
    <ControlTemplate x:Key="template">
        <Canvas>
            <Canvas.RenderTransform>
                <RotateTransform Angle="20"/>
            </Canvas.RenderTransform>
            <Ellipse Height="100" Width="150" 
                     Fill="{Binding 
                RelativeSource={RelativeSource TemplatedParent},
                Path=Background}">

            </Ellipse>
            <ContentPresenter Margin="35" 
                      Content="{Binding RelativeSource={RelativeSource  
                      TemplatedParent},Path=Content}"/>
        </Canvas>
    </ControlTemplate>
</Window.Resources>

<Canvas Name="Parent0">
    <Button   Margin="50" 
              Template="{StaticResource template}" Height="0" 
              Canvas.Left="0" Canvas.Top="0" Width="0">
        <TextBlock FontSize="22">Click me</TextBlock>
    </Button>
</Canvas>

Wenn ich die Eigenschaften eines bestimmten Steuer seiner Steuer Vorlage anwenden wollen, dann kann ich den TemplatedParent-Modus verwenden. Es gibt auch ein ähnliches zu dieser Markup-Erweiterung, die das Template ist die eine Art von kurzer Hand des ersten, aber die Template wird bei der Kompilierung im Kontrast des TemplatedParent bewertet, die nur nach der ersten Laufzeit ausgewertet wird. Wie Sie in der unten Figur bemerken können, sind der Hintergrund und der Inhalt innerhalb der Taste an die Steuer Vorlage angewendet.

Ich dachte, Template nicht Freezable Typen unterstützt (einschließlich Pinselobjekte). Um das Problem zu bekommen. Man kann die Verwendung von TemplatedParent machen

Sie werden in ähnlicher Weise verwendet, aber sie haben ein paar Unterschiede. Hier ist ein Link auf die Template Dokumentation: http://msdn.microsoft.com/en-us/library/ms742882. aspx

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top