Ich habe ein benutzerdefiniertes Steuerelement, Kuchen, die zwei DependencyProperties namens Slice und Füllung enthält. Wie erstelle ich einen Stil, der mir Zugriff auf Slice gewährt, aber auch Slice erstellen kann?Habe meinen Kuchen und esse ihn auch: Binding a Container and It's Inhalt
<Style TargetType={x:Type local:Cake}>
//I don't like setting DataContext Here
<Setter Property="DataContext" Value="{Binding RelativeSource={RelativeSource Self}}/>
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType={x:Type local:Cake}>
<Grid DataContext="{Binding RelativeSource={RelativeSource TemplatedParent}}">
//This is how I display a slice
<ContentPresenter Content={Binding Slice}/>
//This is how cake decorations are displayed
<ItemsPresenter/>
</Grid>
</ControlTemplate>
</Setter.Value>
</Setter>
<Setter Property="Slice">
<Setter.Value>
//Design Slice Here - it's easy to override when I want
<Slice Filling={Binding Filling}> // it's just in a setter.
</Setter.Value>
</Setter>
<Setter Property="DataContext" Value="{Binding RelativeSource={RelativeSource Self}}/>
</Style>
Optionen Ich habe versucht:
ich kein Usercontrol verwenden können, weil ich, mit dem Namen Inhalt zulassen möchten, die anscheinend nicht mit User Controls funktioniert. Siehe Here.
Ich weiß nicht wie das obige Beispiel, weil ich die Datacontext des Kuchenbehälter selbst gesetzt haben, einen Benutzer bedeutet nicht die Datacontext für ihre Bindungen verwenden können.
Ich kann die Filling-Eigenschaft nicht mit RelativeSource binden, da der Style mit mehreren Kuchen nicht wissen würde, welcher der richtige Elternteil war. Siehe Here.
ich den Inhalt Presenter direkt mit einem Slice-Elemente ersetzen könnte, sondern weil es in einer Vorlage ist, verliere ich Zugriff auf die Scheibe überall außerhalb der Vorlage. Während ich den VisualTree in die Scheibe tippen konnte, ist das ein Albtraum.
Ich möchte im Grunde jeder Kuchen ein Stück haben, und in der Lage zu sein, es zu setzen
<Cake.Slice>
<DockPanel>
<Rectangle Background= “Blue”/>
<Rectangle Background= “Blue”/>
<Rectangle Background=“{Binding Filling}”/>
</DockPanel>
</Cake.Slice>
während es auch einen Standard-Look mit zu geben.
EDIT: Offenbar mein Stil funktioniert, vorausgesetzt, dass ich die Cake.dll Referenz wie auf dem Kuchen Projekt gegenüber. Warum sollte das sein?
hast du ein bild was du in dem kuchen erreichen willst? –
@AyyappanSubramanian Yep, nur eine hinzugefügt. – bwall