2017-11-16 3 views
1

Mein benutzerdefiniertes Steuerelement wurde von ContentControl abgeleitet und verfügt über eine zusätzliche Abhängigkeitseigenschaft 'AdditionalContent' vom Typ FrameworkElement.
Diese Eigenschaft wird auf ein ContentPresenter in Stil gebunden, die Ressourcen benutzerdefinierten Stil hat:ContentPresenter Ressourcen wurden nicht angewendet, wenn sie als LogicalChild hinzugefügt wurden

<ContentPresenter ContentSource="AdditionalContent"> 
    <ContentPresenter.Resources> 
    <Style TargetType="{x:Type Button}"> 
     ... some setters ... 
    </Style> 
    </ContentPresenter.Resources> 
</ContentPresenter> 

Wie ich von anderen Fragen hier gelernt habe, muß ich durch den Aufruf AddLogicalChild(AdditionalContent) und übergeordnete LogicalChildren dieses Objekt als logisches Kind meiner Kontrolle hinzufügen Eigentum.

Nun, wenn ich meine Kontrolle wie diese verwenden

<MyControl> 
    <MyControl.AdditionalContent> 
    <Button .../> 
    </MyControl.AdditionalContent> 
</MyControl> 

Der Stil für Button wird nicht angewendet. Und das ist das richtige Verhalten, wegen der Stilvererbung (siehe this answer). Also muss ich den Stil an der Stelle anwenden, an der ich die AdditionalContent definiere. So weit, ist es gut.

Aber seltsam Verhalten: wenn ich das Objekt als logische Kind Zugabe auslassen, die Stile sind angewendet.
Warum passiert das? Und gibt es eine angemessene Möglichkeit, Stile für alle Inhalte innerhalb AdditionalContent ähnlich wie Toolbar Stile zu definieren?

+0

Ich weiß nicht, wo Sie die Informationen erhalten, dass der Stil nicht angewendet wird, aber es ist falsch. Der Stil wurde direkt vor der Button-Instanz in der visuellen Struktur deklariert und so wird es angewendet. Nichts Seltsames hier. Wenn Sie ein anderes Verhalten wünschen, sollte die Button-Instanz einen anderen Stil für sich selbst deklarieren. – Mishka

+0

@ Mishka finden Sie unter [link] (https://stackoverflow.com/q/20116418/2224147). Der 'Button' wird nicht den Stil angewendet, was ist das richtige Verhalten. Aber ich frage mich, warum, wenn man 'AddLogicalChildren' weglässt, dies ändert. – redstripes

Antwort

0

Es ist schwer zu sagen, da Sie einen Großteil der Schaltflächendefinition weggelassen haben, aber versuchen Sie, den Stil der Schaltfläche auf eine dynamische Ressource mit dem Schaltflächentyp als Ressourcenschlüssel festzulegen.

Beim Hinzufügen eines Standardstils ohne Ressourcenschlüssel, wie Sie es getan haben, ist der implizite Schlüssel der Datentyp.

Indem Sie den Stil auf eine dynamische Ressource setzen, geben Sie an, dass sich die Ressource zur Laufzeit ändern könnte. Dies ist der Fall, wenn Sie sie zur Laufzeit in die Baumstruktur einfügen, wie Sie es gerade tun.

+0

Danke für diesen Ansatz, funktioniert aber nicht. Die Schaltflächendefinition enthält nicht mehr als Befehl und Text. – redstripes

Verwandte Themen