返回首页


我用我的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资源之一,另一个视图的网格内)的资源数据的模板。
每个D​​ataTemplate中指定一个唯一的密钥,这是完整的类型名称,它代表(在上面的示例:ImplicitDataTemplate.Rectangle)。
觉得从免费下载此示例代码。
在未来的文章中,我将提供行为的源代码,我将解释我如何实施的行为。 &# 160;
敬请期待。

回答

评论会员: 时间:2