void designPanel_DragOver(object sender, DragEventArgs e)
{
try {
IDesignPanel designPanel = (IDesignPanel)sender;
e.Effects = DragDropEffects.Copy;
e.Handled = true;
Point p = e.GetPosition(designPanel);
if (moveLogic == null) {
if (e.Data.GetData(typeof(CreateComponentTool)) != this) return;
// TODO: dropLayer in designPanel
designPanel.IsAdornerLayerHitTestVisible = false;
DesignPanelHitTestResult result = designPanel.HitTest(p, false, true, HitTestType.Default);
if (result.ModelHit != null) {
designPanel.Focus();
DesignItem createdItem = CreateItem(designPanel.Context);
if (AddItemWithDefaultSize(result.ModelHit, createdItem, e.GetPosition(result.ModelHit.View))) {
moveLogic = new MoveLogic(createdItem);
if (designPanel.Context.Services.Component is XamlComponentService) {
((XamlComponentService) designPanel.Context.Services.Component).RaiseComponentRegisteredAndAddedToContainer(createdItem);
}
createPoint = p;
// We'll keep the ChangeGroup open as long as the moveLogic is active.
} else {
// Abort the ChangeGroup created by the CreateItem() call.
changeGroup.Abort();
}
}
} else if ((moveLogic.ClickedOn.View as FrameworkElement).IsLoaded) {
if (moveLogic.Operation == null) {
moveLogic.Start(createPoint);
} else {
moveLogic.Move(p);
}
}
} catch (Exception x) {
DragDropExceptionHandler.RaiseUnhandledException(x);
}
}