2012-02-29 9 views
1

WPFでネストされたスタイルを設定する際に問題があります。私は「正しい方法」をやっているのかどうかはわかりませんが、私が何をしようとしているのかを記述してコードを提供します。ネストされた要素のトラブルシューティングスタイル

私はKinectのに働いていると私のViewModelにKinectのオブジェクトを表現するためにContentControlにを使用しています。私はそのように宣言します。

<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}" /> 

すぐにネストされた要素に一連のルールを適用します。楕円を青色にし、SkeletonTemplateのContentControlにValueConverterを適用して、画面の小さな部分に拡大縮小します。

私は時間が掛かっていて、わかりません私がこの点まで「正しい」方法ですべてをセットアップしたとしても。

は確かに私は別のContentTemplatesのトン私がする必要があるすべてのさまざまな方法でそのスタイルを再宣言することができ、それははるかに明らかに悪いスタイルです。

手を貸してくれるプロがありますか?

は、私がこれまでに作ったスタイルの試みを貼り付けることもできますが、私は彼らが議論を助けにはなりません、むしろ確信しています。

+0

あなたの質問に答えるが、スタイリングのための発現ブレンドを使用してみてくださいすることはできません....それは大いに役立つだろう... :) – om471987

答えて

1

あなたが不足しているルート機能は、パス上のプロパティではなく上にそのスタイルのセッター作品(ア・ラ・バインディング)である - 私はあなたが持ちたいものです信じています。

は、マイクロソフトのための技術的な理由があることでしたありますスタイルは、複合要素に特定のスタイルに動作しません。同様のスタイリングフレームワーク(特にCSS)は、1つの要素だけの「セッター」もサポートしています(間違いなく、選択がはるかに優れています)。

+0

奇妙だ - それは、特定の化合物の要素の種類のテンプレートを作成することはできませんか? 私がここで狙っている究極の最終目標は、それぞれの関節がそれぞれレンダリングされ、XAMLに効果的にドロップすることができ、簡単に設定できる各関節のプロパティを持つKinectオブジェクトを取得することですその上にユーザー定義のスタイルがあります。 これを達成するために設定できる代替方法がありますか? – Reno

+1

@Reno - カスタムコントロール(つまり、ControlまたはContentControlから派生した独自のオブジェクト、またはすべての結合についてItemsControlが意味をなさない場合)を作成し、ControlTemplate(DataTemplateではなく)を作成し、 {TemplateBinding}あなたが公開したい様々なプロパティー。このチュートリアルをご覧ください:http://wpftutorial.net/HowToCreateACustomControl.html – Uri

+0

ありがとう!私はこれを見ていきます。 – Reno

関連する問題