【发布时间】:2011-01-31 21:04:51
【问题描述】:
一目了然:
我的应用程序显示一个 ItemsControl,其中包含一个 Canvas 作为其 ItemsPanel。 ItemsControl 绑定到对象集合,每个对象都具有 Left/Top/Width/Height 属性。 DataTemplate 用于生成在 Canvas 中呈现并正确定位的矩形(绑定在 Left 和 Top 属性上)。
如何实现拖放以在画布周围移动这些矩形?
我的问题的背景:
我的 WP7 应用显示一个“CanvasItemsControl”,定义如下:
public class CanvasItemsControl : ItemsControl
{
public string XBindingPath { get; set; }
public string YBindingPath { get; set; }
protected override void PrepareContainerForItemOverride(DependencyObject element, object item)
{
FrameworkElement contentitem = element as FrameworkElement;
if (XBindingPath != null && YBindingPath != null)
{
Binding xBinding = new Binding(XBindingPath);
Binding yBinding = new Binding(YBindingPath);
if (contentitem != null)
{
contentitem.SetBinding(Canvas.LeftProperty, xBinding);
contentitem.SetBinding(Canvas.TopProperty, yBinding);
}
}
base.PrepareContainerForItemOverride(element, item);
}
}
并在 XAML 中使用如下:
<hh:CanvasItemsControl Grid.Row="1" x:Name="TheItemsControl"
Style="{StaticResource CanvasItemsControlStyle}"
ItemsSource="{Binding AllObjects}"
XBindingPath="Left" YBindingPath="Top" />
这是 CanvasItemsControl 的样式:
<Style x:Key="CanvasItemsControlStyle" TargetType="local:CanvasItemsControl">
<Setter Property="ItemTemplate" Value="{StaticResource ObjectTemplate}"/>
<Setter Property="ItemsPanel">
<Setter.Value>
<ItemsPanelTemplate>
<Canvas/>
</ItemsPanelTemplate>
</Setter.Value>
</Setter>
</Style>
这是我用来呈现我的课程的 DataTemplate:
<DataTemplate x:Key="ObjectTemplate" >
<Border Background="{Binding Brush}"
Width="{Binding Width}"
Height="{Binding Height}">
<TextBlock Text="{Binding Description}"/>
</Border>
</DataTemplate>
CanvasItemsControl 的来源是具有 Left、Top、Width、Height、Brush 等属性的对象集合。
我的问题
如您所见,最终结果是,当您将项目添加到 AllObjects 集合时,每个对象都会在画布中正确呈现和定位。现在我需要在画布周围拖放/移动这些对象。你会建议我用什么方法来实现拖放?你能指导我完成整个过程吗?
谢谢
【问题讨论】:
标签: silverlight windows-phone-7 drag-and-drop datatemplate