Краткий обзор:
Мое приложение отображает 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 каждый объект отображается и правильно размещается на холсте. Теперь мне нужно перетащить / переместить / переместить эти объекты вокруг холста. Какой подход вы бы посоветовали мне использовать для реализации перетаскивания? Можете ли вы провести меня через этот процесс?
Спасибо