2016-03-23 17 views
1

angegeben werden. Je nach Priorität des Abhängigkeitswerts hat der lokale Wert eine höhere Priorität als Kontrollvorlagen (siehe Link https://msdn.microsoft.com/fr-fr/library/ms743230%28v=vs.85%29.aspx).Der lokale Wert für die Hintergrund- und Inhaltseigenschaft bei Schaltflächensteuerung ist nicht festgelegt, wenn Hintergrund und Inhalt in Steuerelementvorlage

Aber in meinem Beispiel unten, Inhalt und Hintergrund Eigentum der Tastensteuerung wird von der Steuervorlage trotz Angabe dieser Eigenschaften in Steuerungselement locally.Background unterhlab eingestellt ist: Orange und Inhalt als „Templatecontent“

das ist xAML:

<Window.Resources> 
     <ControlTemplate x:Key="ButtonTemplate" TargetType="Button" >    
      <Border CornerRadius="10" Width="100" Height="50" Background="Orange"> 
       <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" Content="TemplateContent" /> 
      </Border> 
     </ControlTemplate> 
    </Window.Resources> 

<Button Template="{StaticResource ButtonTemplate}" Background="Blue" Grid.Row="2" Grid.Column="0" Content="LocalContent" Width="100" Height="100" HorizontalAlignment="Center"> 

ich verstehe auch lokale Werte können Auswirkungen haben, wenn die Kontrolle template.But verwendet wird Template warum nicht ein lokaler Wert Auswirkungen haben trotz Vorrang in Abhängigkeitseigenschaft Wert höherer Ordnung Vorrang haben

+2

Sie müssen Vorlagenbindungen verwenden, wenn Vorlagen anpassbar sein sollen. Ersetzen Sie 'Orange' durch' {TemplateBinding Background} '. Wenn es standardmäßig orange sein muss, stellen Sie einen Stil zur Verfügung, der dies tut - dieser Stil kann auch die Vorlage festlegen, so dass Sie dies nicht explizit tun müssen. –

Antwort

1

Leider ist die MSDN-Dokumentation in diesem Punkt nicht sehr klar (wie es oft der Fall ist), und Sie haben falsch verstanden, was sie unter "lokaler Wert" verstehen.

In Ihrem Beispiel ist der "lokale Wert" von Bedeutung die Border Objekt Background Eigenschaftszuweisung im XAML. Und das hat in der Tat Vorrang. Selbst wenn z.B. Ein Style Setter versucht, den Wert dieser Eigenschaft festzulegen, es würde fehlschlagen, weil Sie den Eigenschaftswert lokal auf "Orange" festgelegt haben.

Die Background="Blue" für das Button Element legt den Wert eine völlig andere Eigenschaft. I.e. die Eigenschaft des Button Objekts, nicht des Objekts Border. Diese Zuweisung wird in der Tat auch hohe Priorität haben, aber nur über Dinge, die diese spezifische Eigenschaft (z. B. eine Button Stil) setzen könnte. Es hat keine Auswirkung auf ein völlig anderes Objekt, das in der Vorlage enthalten ist (d. H. Border).

Das Markup {TemplateBinding ...} existiert für diesen genauen Zweck. Wenn Sie Ihre Vorlage wie folgt erklären:

<ControlTemplate x:Key="ButtonTemplate" TargetType="Button"> 
    <Border CornerRadius="10" Width="100" Height="50" 
      Background="{TemplateBinding Background}"> 
    <ContentPresenter HorizontalAlignment="Center" VerticalAlignment="Center" 
         Content="TemplateContent"/> 
    </Border> 
</ControlTemplate> 

Dann wird WPF wissen zum TemplatedParent Objekt suchen, und seine Background Eigenschaft insbesondere den Wert zu finden, die den Border.Background Eigenschaft Wert zu setzen.

+0

Angesichts der Präzedenz ist es vielleicht erwähnenswert, dass der Standard (orange) über einen 'Button' Stil mit einem entsprechenden' Setter' eingestellt werden sollte. –

+1

@H: Ich stimme Ihrem Verwendungsvorschlag zu, aber ich bin mir nicht sicher, ob das Hinzufügen zur Antwort hilfreich ist oder nicht. Ich denke, die blauen und orangenen Farben in der ursprünglichen Frage sollten wahrscheinlich deutlich machen, dass das Blau die Grenze nicht beeinflusst hat. Ich bin nicht sicher, ob die Absicht wirklich war, eine Standardhintergrundfarbe von Orange zur Verfügung zu stellen (ich bin auch nicht sicher, dass es nicht _ war). Hauptsächlich mache ich mir immer Sorgen darüber, den Antworten zu viele Details hinzuzufügen, und riskiere die Verschleierung des Hauptpunkts. Wenn Sie eine Idee haben, wie Sie diese zusätzlichen Informationen auf eine klare, verwirrungssichere Weise einführen können, würde ich Ihre Bearbeitung begrüßen. –