Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Wpf 向画布添加形状。如何绑定到虚拟机_Wpf_Mvvm_Shapes - Fatal编程技术网

Wpf 向画布添加形状。如何绑定到虚拟机

Wpf 向画布添加形状。如何绑定到虚拟机,wpf,mvvm,shapes,Wpf,Mvvm,Shapes,很抱歉标题有点模糊,但我想不出更好的了 为了便于讨论,假设我正在开发一个简单的绘图应用程序,用户只需单击并拖动鼠标即可绘制一条线(我并不是在开发它,只是为了保持它的简单性) 我有一个自定义形状的线绘制。现在,我想根据需要向视图中添加新行,但我想通过视图模型上的数据绑定使用ObservableCollection属性来实现这一点。通常我会使用ItemsControl。当然,ItemsControl会自动定位它的项目,这不是我想要的 有人知道怎么做吗?是否有办法禁用项控件的布局功能?您可以更改项控件

很抱歉标题有点模糊,但我想不出更好的了

为了便于讨论,假设我正在开发一个简单的绘图应用程序,用户只需单击并拖动鼠标即可绘制一条线(我并不是在开发它,只是为了保持它的简单性)

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


有人知道怎么做吗?是否有办法禁用
项控件的布局功能?

您可以更改
项控件的
项面板
,使其使用
画布
而不是
堆栈面板
来保存其项,然后使用
ItemContainerStyle
Canvas.Top
Canvas.Left
属性绑定到数据对象以定位它们

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

我有一篇关于的博客文章,详细解释了
ItemsControl
的工作原理