我在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,它们以我需要的所有不同方式呈现,但这显然是不好的风格。
那里有哪些专业人士可以伸出援助之手?
我可以粘贴到目前为止我所做的Style尝试,但我相信他们不会帮助讨论。
答案 0 :(得分:1)
你缺少的根功能是Style的setter适用于Properties而不是Path(a la Binding) - 我相信你想拥有它。
Microsoft有这样的技术原因:样式适用于特定样式而不适用于复合元素。类似的样式框架(最值得注意的是:CSS)也支持仅用于一个元素的“setter”(尽管可以说,select非常优秀)。