protected override Script.IScriptCommand executeInner(ParameterDic pm, ItemsControl ic, RoutedEventArgs evnt, IUIInput input, IList <IUIInputProcessor> inpProcs) { var scp = ControlUtils.GetScrollContentPresenter(ic); if (scp != null) { AdornerLayer adornerLayer = ControlUtils.GetAdornerLayer(ic); switch (AdornerMode) { case UIEventHub.AdornerMode.Attach: if (adornerLayer == null) { return(ResultCommand.Error(new Exception("Adorner layer not found."))); } if (UIEventHubProperties.GetSelectedItemsAdorner(scp) == null) { //Create and register adorner. SelectedItemsAdorner adorner = new SelectedItemsAdorner(scp); pm.SetValue(SelectedItemsAdornerKey, adorner); UIEventHubProperties.SetSelectedItemsAdorner(scp, adorner); UIEventHubProperties.SetLastScrollContentPresenter(ic, scp); //For used when detach. adornerLayer.Add(adorner); } break; case UIEventHub.AdornerMode.Detach: var lastScp = UIEventHubProperties.GetLastScrollContentPresenter(ic); //For used when detach. var lastAdorner = UIEventHubProperties.GetSelectedItemsAdorner(scp); if (lastAdorner != null) { adornerLayer.Remove(lastAdorner); } UIEventHubProperties.SetLastScrollContentPresenter(ic, null); UIEventHubProperties.SetSelectedItemsAdorner(scp, null); pm.SetValue <Object>(SelectedItemsAdornerKey, null); break; case UIEventHub.AdornerMode.Update: var updateAdorner = pm.GetValue <SelectedItemsAdorner>(SelectedItemsAdornerKey) ?? UIEventHubProperties.GetSelectedItemsAdorner(scp); if (updateAdorner == null) { return(ResultCommand.Error(new Exception("Adorner not found."))); } Point current = pm.GetValue <Point>(CurrentPositionAdjustedKey); if (updateAdorner.CurrentPosition.X == -1 && updateAdorner.CurrentPosition.Y == -1) { //If the adorner is not initialized. updateAdorner.SetValue(SelectedItemsAdorner.CurrentPositionProperty, current); updateAdorner.SetValue(SelectedItemsAdorner.ItemsProperty, ic.ItemsSource); } else { updateAdorner.SetValue(SelectedItemsAdorner.CurrentPositionProperty, current); } break; } } return(NextCommand); }
public static void SetSelectedItemsAdorner(DependencyObject target, SelectedItemsAdorner value) { target.SetValue(SelectedItemsAdornerProperty, value); }