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?
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
@ 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