Silverlight 4:如何显示自定义控件列表(不按列表顺序)

时间:2010-08-18 03:17:50

标签: silverlight silverlight-4.0 custom-controls

有以下对象:

  • 'FieldItem'自定义控件;
  • 'Field' - ... XAML-object,包含十几个字段项;
  • FieldItemViewModel - 承载要使用“FieldItem”自定义控件显示的数据的数据类;
  • 'FieldItem'控件的位置取决于与控件(X和Y)有界的数据实体参数;
  • items - ObservableCollection - 包含数据的集合。

问题:为了让我的FieldItems的每个项目都显示在Canvas中,我应该放入什么样的对象?

我打算使用ListView ...但是......无法想象如何更改列表视图项的位置......

欢迎任何想法!

感谢。

1 个答案:

答案 0 :(得分:1)

您可以拥有一个简单的ItemsControl。 ItemsControl只是一个项目的容器。 ItemsPanel应设置为您的画布。每个项目的数据模板应该是'FieldItem'控件。 在您的viewmodel中公开一个名为Items的属性,该属性将是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