你可以有一个简单的ItemsControl。 ItemsControl只是一个物品的容器。 ItemsPanel应设置为您的画布。每个项目的数据模板应该是'FieldItem'控件。 在您的viewmodel中公开一个名为Items的属性,它将成为项目数据的集合。 事情类似:
<ItemsControl ItemsSource="{Binding Items}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<FieldItem />
</DataTemplate>
</ItemsControl.ItemTemplate>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<Canvas />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
Silverlight不具有ItemContainerStyle但是你可以设置它在代码:
public class MyItemsControl : ItemsControl
{
protected override void PrepareContainerForItemOverride(DependencyObject element, object item)
{
FrameworkElement contentitem = element as FrameworkElement;
Binding leftBinding = new Binding("Position.X");
Binding topBinding = new Binding("Position.Y");
contentitem.SetBinding(Canvas.LeftProperty, leftBinding);
contentitem.SetBinding(Canvas.TopProperty, topBinding);
base.PrepareContainerForItemOverride(element, item);
}
}
从这里摘自:http://forums.silverlight.net/forums/p/29753/96429.aspx
尤瓦,你可以还请说明:我的'FieldItemViewModel'类的哪个属性应该包含'X'和'Y'值?这应该是一个普通的'X'和'Y'属性,或者我需要'Position'属性,它本身具有'X'和'Y'?先谢谢你。 – Budda 2010-08-18 23:56:12
Yuval,谢谢......现在我看到,“Position.X/Y”属性在绑定到项目的对象内部查看。谢谢! – Budda 2010-08-23 03:26:24