public virtual void Node_MouseDown(object sender, MouseButtonEventArgs e)
{
if (HostCanvas.SelectedNodes.Contains(this))
{
if (Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl))
{
// Remove this node from selection
HostCanvas.SelectedNodes.Remove(this);
HostCanvas.SelectedUiElements.Remove(Border);
IsSelected = false;
}
else
{
// Subsribe multiselection to hostCanvas MouseMove event
foreach (var node in HostCanvas.SelectedNodes)
{
HostCanvas.MouseMove += node.HostCanvas_MouseMove;
HostCanvas.MouseUp += node.Node_MouseUp;
node.OldMousePosition = e.GetPosition(HostCanvas);
}
}
}
else
{
if (Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl))
{
// add this node to selection
HostCanvas.SelectedNodes.Add(this);
HostCanvas.SelectedUiElements.Add(Border);
IsSelected = true;
}
else
{
// Seleted this node as single
foreach (var node in HostCanvas.SelectedNodes)
node.IsSelected = false;
HostCanvas.SelectedNodes.Clear();
HostCanvas.SelectedUiElements.Clear();
HostCanvas.SelectedNodes.Add(this);
HostCanvas.SelectedUiElements.Add(Border);
IsSelected = true;
foreach (var node in HostCanvas.SelectedNodes)
{
HostCanvas.MouseMove += node.HostCanvas_MouseMove;
HostCanvas.MouseUp += node.Node_MouseUp;
node.OldMousePosition = e.GetPosition(HostCanvas);
}
}
HostCanvas.mouseMode = MouseMode.Selection;
}
e.Handled = true;
}