创建资源实例?

时间:2010-04-27 16:36:27

标签: wpf

我是WPF的新品牌,我正在努力解决我正在阅读的项目。

我对资源的理解是它实例,你不能像工厂一样使用它并创建它的实例。例如,XAML定义的矩形。你可以参考它,但你不能在表面上有很多实例。

在WPF中,这样做的方法是什么?如果我将Rectangle定义为具有特定属性的资源,并希望在动态生成的网格中拥有多个实例,那么我应该如何处理它?或者我应该尝试不同的方式吗?

纯粹的学术练习,没有真实的应用。

2 个答案:

答案 0 :(得分:2)

实际上,没有任何关于资源的信息会阻止您多次使用它。一个完美的例子是画笔资源,样式资源等。您可以在XAML中定义它们,XAML解析器创建资源的单个实例并将它们存储在资源字典中,这些画笔,样式等可以用作属性值很多次,即使只创建了一个资源实例。

但是,正如您所说,您无法真正定义Rectangle资源并在可视化树中多次使用它。这与它是一个资源这一事实无关,而是与FrameworkElement不能是多个父元素的子元素这一事实有关。

所以我们所拥有的就是“模板”。这些告诉WPF如何创建元素树,但在实例化模板之前实际上不会创建树。以下是一个例子。

<UserControl>
    <ItemsControl ItemsSource="{Binding WholeBunchOfItems}">
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <Grid>
                    <Rectangle Fill="Yellow" />
                    <ContentPresenter Content="{Binding}" />
                </Grid>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>
</UserControl>

在这个例子中,我将ItemsControl绑定到某种集合。对于集合中的每个项目,ItemsControl将使用我的DataTemplate来呈现项目。在DataTemplate中,您可以使用数据绑定来访问当前项目。

我建议在MSDN上阅读ControlTemplate, DataTemplate, and Style。这些都是WPF / Silverlight中的重要概念。

答案 1 :(得分:0)

要在网格或列表框中复制多个实例,您需要设置数据模板以定义每行数据的UI控件,然后将网格或列表框数据绑定到一组数据,以确定行数和行数。个别字段值。

首先要研究的关键术语:数据模板。