У меня есть пользовательский контроль, на котором я хочу реализовать интерфейс перетаскивания, вот важные части реализации, и это прекрасно работает:
XML-файл в usercontrol для перетаскивания:
<UserControl
...default xmlns...
MouseLeftButtonDown="Control_MouseLeftButtonDown">
...GUI-ELEMENTS in the control...
</UserControl>
Код:
public partial class DragableControl : UserControl
{
private void Control_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
DragDrop.DoDragDrop(this, this, DragDropEffects.Move);
}
}
XML-файл для usercontrol, который сможет принять операцию перетаскивания:
<Usercontrol
...default xmlns...>
<Grid AllowDrop="True" Drop="Grid_Drop">
... GUI elements in the grid....
</Grid>
</Usercontrol>
Код:
public partial class DropClass: UserControl
{
private void Grid_Drop(object sender, DragEventArgs e)
{
var control = (DragableControl)e.Data.GetData(typeof(DragableControl));
if(control != null)
{
//do something
}
}
}
Чтобы иметь возможность создавать различные пользовательские элементы управления с функцией перетаскивания, я создаю базовый класс BaseDragableUserControl, который на данный момент ничего не содержит, но наследует от usercontrol.
Код:
public class BaseDragableUserControl: UserControl
{
}
Я изменяю свой код (как xaml, так и код):
public partial class DragableControl : UserControl
Я также изменяю класс для получения на:
public partial class DropClass: UserControl
{
private void Grid_Drop(object sender, DragEventArgs e)
{
var control =(BaseDragableUserControl)e.Data.GetData(typeof(BaseDragableUserControl));
if(control != null)
{
//do something
}
}
}
Но переменная control всегда равна нулю. Я предполагаю, что getdata в DragEventsArgs не любит наследование. Есть ли способ добиться этого? Чтобы можно было использовать базовый класс для класса перетаскивания?