2012-02-29 53 views
1

我在設置WPF中的嵌套樣式時遇到了問題。我不知道我是否以'正確的方式'做事 - 但我會描述我正在嘗試做什麼並提供一些代碼。嵌套元素的故障設置樣式

我正在使用Kinect,並使用ContentControl在我的ViewModel中表示Kinect對象。我宣佈它是這樣:

<ContentControl Content="{Binding Kinect}" ContentTemplate="{StaticResource SkeletonTemplate}" /> 

我然後設置SkeletonTemplate這樣:

<DataTemplate x:Key="SkeletonTemplate"> 
    <Grid> 
     <ContentControl Content="{Binding HandLeft}" ContentTemplate="{StaticResource JointTemplate}"/> 
     <ContentControl Content="{Binding HandRight}" ContentTemplate="{StaticResource JointTemplate}"/> 
    </Grid> 
</DataTemplate> 

最後,我設置了一個JointTemplate這樣:

<DataTemplate x:Key="JointTemplate"> 
    <Ellipse Fill="Red" Margin="0,0,620,460"> 
     <Ellipse.RenderTransform> 
      <TranslateTransform X="{Binding Path=Position.X}" Y="{Binding Path=Position.Y}" /> 
     </Ellipse.RenderTransform> 
    </Ellipse> 
</DataTemplate> 

一切都虎背熊腰,腳蹬除非我真的希望能夠設置一個最高級別的樣式,使我可以對嵌套元素進行樣式設置。例如,我希望能夠這樣做:

<ContentControl Content="{Binding Kinect}" Style="{DynamicResource ShrunkBlueSkeleton}" ContentTemplate="{StaticResource SkeletonTemplate}" /> 

並立即將一組規則應用於嵌套元素。使橢圓藍色,將ValueConverter應用於SkeletonTemplate中的ContentControls,以將它們縮放到屏幕的較小部分等。

我有一個時間讓它工作,我不確定如果我甚至已經以「正確」的方式將所有的東西都建立起來了。

當然,我可以重新聲明大量不同的ContentTemplates,它們以我需要的所有不同方式呈現,但這種風格明顯更糟。

在那裏可以伸出援助之手嗎?

我可以粘貼到目前爲止我所做的樣式嘗試,但我相信他們不會幫助討論。

+0

不能回答你的問題,但嘗試使用表達式混合造型....它會幫助很多.. :) – om471987 2012-02-29 02:54:44

回答

1

您缺少的根特徵是Style的setter在Properties上而不在Path(la Binding)上工作 - 我相信這是您想要的。

微軟有這樣的技術原因:樣式適用於特定的樣式,而不適用於複合元素。類似的樣式框架(最顯着的是CSS)也支持「setter」,只是針對一個元素(儘管可以說select是非常優越的)。

+0

這很奇怪 - 所以不可能創建一個特定的複合元素的排序模板? 我的意思是,我在這裏拍攝的最終目標是將這個Kinect對象與每個關節的屬性相關聯,每個關節都有各自的渲染方式,並且能夠將其有效地放置到XAML的任何地方並輕鬆設置一個用戶定義的樣式。 有沒有另外一種方法可以完成這些工作? – Reno 2012-02-29 08:27:49

+1

@Reno - 您可以創建自定義控件(也就是說,您自己的對象派生自Control或ContentControl,或者甚至ItemsControl對於所有連接都是合理的),然後創建一個ControlTemplate(不是DataTemplate),並使用{TemplateBinding}爲你想要公開的各種屬性。看看這個教程:http://wpftutorial.net/HowToCreateACustomControl.html – Uri 2012-02-29 15:35:12

+0

謝謝!我會看看這個。 – Reno 2012-02-29 21:24:11