나는 슬라이스 및 필이라는 두 개의 DependencyProperties를 포함하는 사용자 정의 컨트롤 인 Cake를 가지고있다. 슬라이스에 액세스 할 수있는 스타일을 어떻게 만들 수 있습니까? 슬라이스를 디자인 할 수 있습니까?내 케이크 먹고 그것을 먹기 : 컨테이너 및 그것의 내용 바인딩
<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>
옵션이 나는 시도했다 : 나는 분명히 사용자 컨트롤 작동하지 않습니다라는 내용을 허용 할 때문에
은 내가 UserControl을 사용할 수 없습니다. 자신의 바인딩에 대한 DataContext를 사용할 수 없습니다 사용자를 의미, 내가 자기에게 케이크 컨테이너의 DataContext를 설정해야하기 때문에 위의 예를 싫어 Here.
를 참조하십시오.
케이크를 사용하면 스타일이 올바른 부모인지 알 수 없으므로 RelativeSource를 사용하여 필링 속성을 바인딩 할 수 없습니다. Here.
내가 슬라이스 요소, 직접 컨텐츠 발표자를 대체 할 수 있지만, 템플릿에 있기 때문에, 내가 템플릿 외부 슬라이스 어디서나 에 대한 액세스를 풀어 참조하십시오. visualTree를 슬라이스까지 내림차순으로 캐스팅 할 수는 있지만 유지 관리의 악몽을 느끼게됩니다.
<Cake.Slice>
<DockPanel>
<Rectangle Background= “Blue”/>
<Rectangle Background= “Blue”/>
<Rectangle Background=“{Binding Filling}”/>
</DockPanel>
</Cake.Slice>
사용하여 설정할 수 있어야합니다.
편집 : 은 분명히 내 스타일이 작품의 케이크 프로젝트 반대로 나는 Cake.dll를 참조하는 것을 제공 않습니다. 왜 그랬을까요?
케이크에서 얻고 싶은 사진이 있습니까? –
@AyyappanSubramanian 예, 방금 추가했습니다. – bwall