我有一个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
的作用类似,但我不太清楚它能解决我的问题。
任何人都可以解释应该怎么做吗?
答案 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 ......
如果您需要更多帮助,请告诉我,我可以为您整理样品。