从XAML模板生成WPF元素数组

时间:2013-08-15 09:00:49

标签: wpf controltemplates

我有一个WPF程序,必须在Canvas上绘制一个“砖块”数组。有几种不同的砖类型,每种都看起来不同。

我希望使用相当任意的XAML片段绘制每种砖类型,例如

<Canvas> <!-- or some other per-brick container -->
    <Rectangle Fill="Brown" Stroke="Gray" StrokeThickness="0.1" Canvas.Left="-1" Canvas.Top="-1" Width="2" Height="2" />
    <Ellipse Fill="Blue" Canvas.Left="-0.8" Canvas.Top="-0.8" Width="1.6" Height="1.6"/>
</Canvas>

但是我希望代码隐藏多次克隆这个片段,将每个拷贝翻译并旋转到位。

这类似于ItemsControl所做的,除了我需要计算自己的砖位置。它似乎与ControlTemplate的作用类似,但我不太清楚它能解决我的问题。

任何人都可以解释应该怎么做吗?

1 个答案:

答案 0 :(得分:1)

有几种方法,但我要使用的是使用视图模型,是的,是ItemsControl。您可以指定ItemsControl应使用的容器类型并传入Canvas,然后您可以将一组Bricks绑定到ItemsControl的ItemsSource。

然后,对于每种类型的砖,您可以定义一个DataTemplate,指定应该如何呈现该类型。如果项目具有X和Y等属性,您可以将它们绑定到DataTemplate中的Canvas.Left和Canvas.Right属性,然后关闭...

我的意思的一个很好的例子是https://stackoverflow.com/a/1030191/430661(最受欢迎的答案,而不是选定的答案),除了项目模板是内联而不是通过DataTemplates指定的。只需将itemTemplate保留为空,让框架根据类型选择合适的DataTemplate。

现在另一方面,如果你希望屏幕上有很多砖块,或者对它们执行复杂的动画,或者类似的东西......对于那种情况,这可能不会表现得足够好。但是你最好还是不要使用WPF ......

如果您需要更多帮助,请告诉我,我可以为您整理样品。