我用我的Silverlight 4复合UI棱镜4。工作与棱镜,填充一个区域的方法有两种:可以填充它的观点,这是一个UI元素,或直接将视图模型。我个人支持UI元素不得被视为直接从应用程序逻辑的想法,并应在应用程序逻辑零的UI元素。因此,在本机,填充视图模型视图的一个区域,而不是声音对我来说更合理。
使用WPF的东西更容易。所有你所要做的的是创建一个视图模型的隐式数据模板,让WPF中做休息。
如果你是一个Silverlight开发人员,你从来没有开发的WPF之前,模板隐式数据听起来有些陌生。
隐式数据模板是一个普通的数据模板,针对特定类型的,我们在一个特定的视图模型。一旦放置一个ContentControl的内容,或在ItemsControl的项目该类型的一个实例,该模板隐式数据是自动选择的框架和用于创建一个视觉元素,增加了有关项目的可视化树。
在Silverlight 4中,有没有隐式的数据模板(将在Silverlight 5在写这篇文章时是Beta)。在这种情况下,你应该直接控制本身,这是一个大的缺点在许多情况下,包括添加视图模型直接向区指定的数据模板。
在互联网上搜索,我发现执行Silverlight 4中的隐式数据模板。我个人不喜欢它的原因有两个: 所有的数据模板必须放在应用程序的资源只,并没有选项覆盖在较低水平的可视化树,他们。 有没有简单的方法,指定隐式数据模板,并迁移到Silverlight 5支持隐式数据模板不会本土。
有点晚了,但尽管如此,我已经开发了自己的解决方案,使用附加的行为,我想与大家分享。
;
因此,这里的ContentControl(或派生类型)和ItemsControl的(或派生类型)的用法: 1.<ContentControl Grid.Column="1"
2. VerticalAlignment="Center" HorizontalAlignment="Center"
3. Content="{Binding SelectedShape, Mode=OneWay}" >
4. <i:Interaction.Behaviors>
5. <ts:ImplicitContentTemplateBehavior />
6. </i:Interaction.Behaviors>
7.</ContentControl>
{C}
在我们上面的代码片断,有一个约束,这是一个Shape类型(基类),这可能是一个形状(派生类型)SelectedShape属性的ContentControl:圆形,矩形和三角形,这是一个ListBox形状的集合的约束。
在ListBox中,您可能会看到不同的DataTemplate含蓄地拿起。点击一个形状,你可以再次看到它,但现在ContentControl的内容。
60;
这种行为是通过ImplicitContentTemplateBehavior ImplicitItemTemplateBehavior accordantly。
这里是长方型的DataTemplate:
;1.<UserControl.Resources>
2. <DataTemplate x:Key="ImplicitDataTemplate.Rectangle">
3. <Grid Height="120" Width="120">
4. <Rectangle StrokeThickness="4">
5. <Rectangle.Stroke>
6. <LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
7. <GradientStop Color="White" Offset="0"/>
8. <GradientStop Color="#FFC24400" Offset="0.992"/>
9. </LinearGradientBrush>
10. </Rectangle.Stroke>
11. <Rectangle.Fill>
12. <LinearGradientBrush EndPoint="0.5,1"
MappingMode="RelativeToBoundingBox" StartPoint="0.5,0">
13. <GradientStop Color="#FFFFEACA"/>
14. <GradientStop Color="#FFFF6200" Offset="0.989"/>
15. </LinearGradientBrush>
16. </Rectangle.Fill>
17. </Rectangle>
18. <TextBlock Text="{Binding Name}" HorizontalAlignment="Center"
VerticalAlignment="Center" />
19. </Grid>
20. </DataTemplate>
21.</UserControl.Resources>
正如你可以看到,我放在矩形视图本身(还有另外两个,位于APP资源之一,另一个视图的网格内)的资源数据的模板。
每个DataTemplate中指定一个唯一的密钥,这是完整的类型名称,它代表(在上面的示例:ImplicitDataTemplate.Rectangle)。
觉得从免费下载此示例代码。
在未来的文章中,我将提供行为的源代码,我将解释我如何实施的行为。
160;
敬请期待。