/// <summary> /// /// </summary> /// <param name="control"></param> /// <param name="toggle"></param> public virtual void SelectLink(NodeEdgeControl control, LinkInfo info, bool toggle) { if (control == null) { return; } object edge = (object)control.Edge; if (selected_links_.Contains(info)) { if (toggle) { control.Path.SetValue(Selector.IsSelectedProperty, false); selected_links_.Remove(info); link_controls_.Remove(info); } } else { control.Path.SetValue(Selector.IsSelectedProperty, true); selected_links_.Add(info); link_controls_.Add(info, control.Path); } }
/// <summary> /// /// </summary> /// <param name="control"></param> public virtual void UnselectLink(NodeEdgeControl control, LinkInfo info) { if (control == null) { return; } object edge = (object)control.Edge; control.Path.SetValue(Selector.IsSelectedProperty, false); selected_links_.Remove(info); link_controls_.Remove(info); }
/// <summary> /// /// </summary> /// <param name="sender"></param> /// <param name="args"></param> protected void OnLinkSelected(object sender, LinkSelectedEventArgs args) { // Travel up the visual tree to find the edge FrameworkElement element = args.Link; NodeEdgeControl control = element.FindVisualParentOfType <NodeEdgeControl>(); NodeEdge edge = control.Edge as NodeEdge; Tuple <object, object> link = element.DataContext as Tuple <object, object>; LinkInfo info = selected_links_.FirstOrDefault(x => (x.Link == link) && (x.Edge == edge)); if (info == null) { ClearSelection(); info = new LinkInfo() { Edge = edge, Link = link }; SelectLink(control, info, false); } }