1

我有一个 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>

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

这类似于 anItemsControl所做的,除了我需要计算我自己的积木位置。它似乎也类似于做什么ControlTemplate ,但我不太了解解决我的问题。

谁能解释它应该怎么做?

4

1 回答 1

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 ......

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

于 2013-08-15T10:10:13.610 回答