C# Сделать пользовательский элемент управления перетаскиваемым

В настоящее время я работаю над Scheduler-Control для своего приложения. Планировщик представляет собой сетку с указанными столбцами и строками. Для моих встреч я создал пользовательский элемент управления с этим кодом:

<UserControl x:Class="Testprokekt.Appointment"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         xmlns:local="clr-namespace:Testprokekt"
         mc:Ignorable="d" 
         d:DesignHeight="300" d:DesignWidth="300">
<Border x:Name="border" BorderBrush="Black" BorderThickness="1">
    <StackPanel x:Name="contentPanel">
        <TextBlock x:Name="titleBlock" TextWrapping="Wrap" FontWeight="Bold"/>
        <TextBlock x:Name="textBlock" TextWrapping="Wrap" HorizontalAlignment="Left"/>
    </StackPanel>
</Border>
</UserControl>

Это работает отлично, и у меня нет проблем. Но теперь я хочу иметь возможность перетаскивать эти встречи в планировщик (сетку). Есть ли способ сделать это?

Планировщик выглядит следующим образом: Каждая ячейка представляет собой ячейку сетки. введите здесь описание изображения


person F. Baum    schedule 23.08.2016    source источник
comment
Наверняка msdn.microsoft.com/en-us/ library/hh144799(v=vs.110).aspx, так уж получилось, что начало и конец являются одним и тем же элементом управления   -  person BugFinder    schedule 23.08.2016
comment
@BugFinder спасибо. Есть ли способ привязать встречи к сетке, чтобы их нельзя было размещать везде, а только на линиях сетки?   -  person F. Baum    schedule 23.08.2016
comment
что-то вроде stackoverflow.com/questions/25282443/? я так понимаю у тебя гугл-фу не хватает   -  person BugFinder    schedule 23.08.2016
comment
да гугл у меня не работает :D просто шутка, не нашел   -  person F. Baum    schedule 23.08.2016
comment
все, что я гуглил, было wpf drag drop align c#   -  person BugFinder    schedule 23.08.2016
comment
Если вы хотите сделать его перетаскиваемым, я бы посоветовал вам поместить целевые (перетаскиваемые) объекты внутрь Canvas :) Canvas — это то же самое, что и сетка, но с гораздо меньшей сложностью (которая на самом деле работает быстрее, чем сетка, но вы не получаете все пикантные вещи из сетки) И затем вы можете настроить точное положение объектов с помощью Canva.Top=Desired Y-Pos Canvas.Left=Desired X-Pos, они могут быть связаны или вы можете использовать objectToMove.SetValue(Canvas.TopProperty, newPositionY); objectToMove.SetValue(Canvas.LeftProperty, newPositionX); из кода программной части   -  person Zerratar    schedule 23.08.2016
comment
@KarlPatrikJohansson спасибо. Но с холстом мне нужно знать правильные координаты для размещения предметов. У меня получилось работать с сеткой и моими пользовательскими элементами управления, но пришлось немного поработать, например, столкновение с другими назначениями. :)   -  person F. Baum    schedule 23.08.2016
comment
@ F.Baum Да, действительно :-P это может быть не такое изящное решение, как предложил BugFinder. Однако это дает вам полный контроль над решением! Для столкновения вы должны выполнить обнаружение столкновения с блоком, а для привязки к сетке вы определяете указатель мыши над ячейкой / или ячейками внутри коллайдера блока и просто автоматически выравниваете блок назначения: D   -  person Zerratar    schedule 23.08.2016
comment
@KarlPatrikJohansson Да, все сделал правильно, как вы объяснили: D   -  person F. Baum    schedule 23.08.2016