Я поместил несколько форм (как Ellipse
и Rectangle
) на a Canvas
. Теперь, я хочу, чтобы пользователь смог к перетаскиванию эти формы. Разве существует ли некоторая предопределенная функциональность, которую я могу использовать, или я должен реализовать перетаскивание сам с помощью событий от нажатия мыши?
Спасибо!
Обработка событий мыши и реализация перетаскивания, безусловно, сработает, но в зависимости от того, что ты пытаешься сделать, ты, возможно, сможешь использовать поведение Expression Blend. Microsoft.Expression.Interactions DLL включает в себя некоторые полезные базовые модели поведения, триггеры, и действия, которые будут использоваться в Silverlight и WPF.
Существует MouseDragElementBehavior, реализующий базовую функциональность перетаскивания элемента, которая должна работать независимо от контейнера компоновки (чтобы вы не были ограничены холстом). Вы можете бросить это поведение на элемент, используя Blend, или определить его непосредственно в XAML, если хотите:
<Rectangle Fill="Red" Stroke="Black" HorizontalAlignment="Left" Width="100" Height="100">
<i:Interaction.Behaviors>
<il:MouseDragElementBehavior/>
</i:Interaction.Behaviors>
</Rectangle>
Ваш проект должен будет ссылаться на System.Windows.Interactivity.dll и Microsoft.Expression.Interactions.dll, чтобы использовать это поведение.
EDIT (чтобы показать прикрепление этого поведения в C# коде позади):
Rectangle rect = new Rectangle();
rect.Fill = new SolidColorBrush(Colors.Red);
rect.Width = 100;
rect.Height = 100;
MouseDragElementBehavior dragBehavior = new MouseDragElementBehavior();
dragBehavior.Attach(rect);
Не забудьте включить пространство имен Microsoft.Expression.Interactivity.Layout namespace с вашими операторами использования.
.Думаю, вам нужно будет сделать это самому, используя события мыши и визуальное дерево. Вот статья, которая, на мой взгляд, поможет - текст ссылки . Если нет, то у меня есть пример кода, который я могу выложить позже вечером.
HTH
.