0

我有一个具有集合源的 ItemsControl,项目出现在画布中,我可以使用鼠标事件移动它们,如何保存项目的位置(x,y)?

这是我的代码:

 <ItemsControl x:Name="icTables" Padding="0,30,0,0" Margin="249,88,0,115" Width="737" HorizontalAlignment="Left" FontWeight="Bold" BorderBrush="#FF6C6C6C" BorderThickness="1">
        <ItemsControl.ItemsPanel>
            <ItemsPanelTemplate>
                <jas:DragCanvas x:Name="drCanvas"></jas:DragCanvas>
            </ItemsPanelTemplate>
        </ItemsControl.ItemsPanel>
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <ToggleButton x:Name="btnTable" Foreground="#ff252526" Width="75" Height="75">
                    <StackPanel Orientation="Vertical">
                        <TextBlock Text="{Binding TableNo}" FontSize="14" HorizontalAlignment="Center" Foreground="#FFECECEC"/>
                    </StackPanel>
                </ToggleButton>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>

谢谢。

4

2 回答 2

0

您可以 foreach 画布中的所有项目,检索它们的 Left 和 Top 值并存储它们,或者您可以在 Canvas.Left 和 Canvas.Top 属性之间进行双向数据绑定,并在 Item ViewModels 中进行 2 个匹配的属性并将值存储在那里.

于 2013-11-12T14:10:01.207 回答
0

可能您应该扩展 DragCanvas,当引发拖动完成事件时,您应该将位置信息保存到项目(通过附加的依赖属性)。

drCanvas.DragCompleted +=(s,e)=>
{
   var pos = Mouse.GetPosition(this);
   ToggleButton.SetValue(PositionAttachedDependencyProperty,pos);
};
于 2013-11-12T14:21:44.770 回答