1

抱歉,标题有点含糊,但我想不出更好的。

出于争论的原因,假设我正在开发一个简单的绘图应用程序,用户只需单击并拖动即可绘制一条线(我并没有真正开发它,只是为了保持简单)。

我有一个自定义形状来绘制线条。现在我想根据需要向视图添加新行,但我想ObservableCollection通过视图模型上的数据绑定使用属性来做到这一点。通常我会使用ItemsControl. 但是当然会ItemsControl自动定位它的项目,这不是我想要的。

有谁知道如何做到这一点?有没有办法禁用布局功能ItemsControl

4

1 回答 1

3

You can change the ItemsPanelTemplate of an ItemsControl so it uses a Canvas instead of a StackPanel to hold its items, then use the ItemContainerStyle to bind the Canvas.Top and Canvas.Left properties to your data object to position them.

<ItemsControl ItemsSource="{Binding MyCollection}">
    <!-- ItemsPanelTemplate -->
    <ItemsControl.ItemsPanel>
        <ItemsPanelTemplate>
            <Canvas />
        </ItemsPanelTemplate>
    </ItemsControl.ItemsPanel>

    <!-- ItemContainerStyle -->
    <ItemsControl.ItemContainerStyle>
        <Style>
            <Setter Property="Canvas.Top" Value="{Binding Y}" />
            <Setter Property="Canvas.Left" Value="{Binding X}" />
        </Style>
    </ItemsControl.ItemContainerStyle>
</ItemsControl>

I have a blog article about the ItemsControl that explains in more detail how an ItemsControl works if you're interested.

于 2013-05-08T13:18:01.873 回答