protected override IScriptCommand executeInner(ParameterDic pm, ItemsControl ic, RoutedEventArgs evnt, IUIInput input, IList <IUIInputProcessor> inpProcs) { if (!_update) { var selectedIdList = pm.ContainsKey("SelectedIdList") ? pm["SelectedIdList"] as List <int> : new List <int>(); logger.Debug(String.Format("Highlighting {0} items", selectedIdList.Count())); for (int i = 0; i < ic.Items.Count; i++) { DependencyObject item = ic.ItemContainerGenerator.ContainerFromIndex(i); if (item != null) { bool isSelecting = selectedIdList.Contains(i); //UIEventHubProperties.SetIsSelecting(item, isSelecting); var selectable = (item as FrameworkElement).DataContext as ISelectable; if (selectable != null) { selectable.IsSelecting = isSelecting; } } } } else { List <object> unselectedList = pm["UnselectedList"] as List <object>; List <int> unselectedIdList = pm["UnselectedIdList"] as List <int>; List <object> selectedList = pm["SelectedList"] as List <object>; List <int> selectedIdList = pm["SelectedIdList"] as List <int>; logger.Debug(String.Format("Highlighting {0} items", selectedIdList.Count())); logger.Debug(String.Format("De-highlighting {0} items", unselectedIdList.Count())); for (int i = 0; i < ic.Items.Count; i++) { DependencyObject ele = ic.ItemContainerGenerator.ContainerFromIndex(i); ISelectable item = ic.Items[i] as ISelectable; if (ele != null) { bool isSelecting = UIEventHubProperties.GetIsSelecting(ele); if (isSelecting && unselectedList.Contains(ele)) { item.IsSelecting = false; } //AttachedProperties.SetIsSelecting(item, false); else if (!isSelecting && selectedList.Contains(ele)) { item.IsSelecting = true; } //AttachedProperties.SetIsSelecting(ele, true); } } } return(NextCommand); }
public static ScrollContentPresenter GetScrollContentPresenter(Control c) { var retVal = UIEventHubProperties.GetScrollContentPresenter(c); if (retVal == null) { retVal = UITools.FindAncestor <ScrollContentPresenter>( GetItemsPresenter(c)); UIEventHubProperties.SetScrollContentPresenter(c, retVal); } return(retVal); }
protected override IScriptCommand executeInner(ParameterDic pm, UIElement sender, RoutedEventArgs evnt, IUIInput input, IList <IUIInputProcessor> inpProcs) { var adornerLayer = pm.GetValue <AdornerLayer>(AdornerLayerKey); DragAdorner adorner = new DragAdorner(adornerLayer) { IsHitTestVisible = false, DraggingItemTemplate = UIEventHubProperties.GetDragItemTemplate(sender) }; pm.SetValue(AdornerKey, adorner); return(NextCommand); }
protected override IScriptCommand executeInner(ParameterDic pm, ItemsControl ic, RoutedEventArgs evnt, IUIInput input, IList <IUIInputProcessor> inpProcs) { Point posRelToScp = pm.GetValue <Point>(CurrentRelativePositionKey); var startSelected = UIEventHubProperties.GetStartSelectedItem(ic); List <object> selectedList = new List <object>(); List <int> selectedIdList = new List <int>(); var scp = ControlUtils.GetScrollContentPresenter(ic); var currentSelected = UITools.GetSelectedListBoxItem(scp, posRelToScp); if (startSelected != null && currentSelected != null) { int startIdx = ic.ItemContainerGenerator.IndexFromContainer(startSelected); int endIdx = ic.ItemContainerGenerator.IndexFromContainer(currentSelected); for (int i = Math.Min(startIdx, endIdx); i <= Math.Max(startIdx, endIdx); i++) { selectedList.Add(ic.Items[i]); selectedIdList.Add(i); } } //UpdateStartSelectedItems, or clear it if no longer selecting. if (UIEventHubProperties.GetIsSelecting(ic)) { if (UIEventHubProperties.GetStartSelectedItem(ic) == null) { var itemUnderMouse = UITools.GetSelectedListBoxItem(scp, posRelToScp); UIEventHubProperties.SetStartSelectedItem(ic, itemUnderMouse); } } else { UIEventHubProperties.SetStartSelectedItem(ic, null); } if (UIEventHubProperties.GetIsSelecting(ic)) { if (UIEventHubProperties.GetStartSelectedItem(ic) == null) { UITools.SetItemUnderMouseToAttachedProperty(ic, posRelToScp, UIEventHubProperties.StartSelectedItemProperty); } } pm.SetValue(SelectedListKey, selectedList); pm.SetValue(SelectedIdListKey, selectedIdList); logger.Debug(String.Format("Selected = {0}", selectedIdList.Count())); return(NextCommand); }
public static T FindLogicalAncestor <T>(DependencyObject obj, Func <T, bool> filter = null) where T : DependencyObject { filter = filter ?? (depObj => true); while (obj != null) { T o = obj as T; if (o != null && filter(o)) { return(o); } obj = LogicalTreeHelper.GetParent(obj); if (obj != null && UIEventHubProperties.GetSkipLookup(obj)) { obj = null; } } return(default(T)); }
//http://stackoverflow.com/questions/665719/wpf-animate-listbox-scrollviewer-horizontaloffset public static T FindVisualChild <T>(DependencyObject obj, Func <T, bool> filter = null, int level = -1) where T : DependencyObject { if (filter == null) { filter = (t) => true; } // Search immediate children first (breadth-first) for (int i = 0; i < VisualTreeHelper.GetChildrenCount(obj); i++) { DependencyObject child = VisualTreeHelper.GetChild(obj, i); if (child != null && child is T && filter((T)child)) { return((T)child); } else { if (level == -1 || level > 0) { if (!UIEventHubProperties.GetSkipLookup(child)) { T childOfChild = FindVisualChild <T>(child, filter, level == -1 ? -1 : level - 1); if (childOfChild != null) { return(childOfChild); } } } //else // Debug.WriteLine(child); } } return(null); }
protected override Script.IScriptCommand executeInner(ParameterDic pm, ItemsControl ic, RoutedEventArgs evnt, IUIInput input, IList <IUIInputProcessor> inpProcs) { var scp = ControlUtils.GetScrollContentPresenter(ic); bool isSelecting = UIEventHubProperties.GetIsSelecting(ic); FindSelectionMode fsMode = FindSelectionMode.HitTest; IChildInfo icInfo = UITools.FindVisualChild <Panel>(scp) as IChildInfo; if (icInfo != null) { fsMode = FindSelectionMode.IChildInfo; } else if (ic is ListView && (ic as ListView).View is GridView) { fsMode = FindSelectionMode.GridView; } logger.Debug(String.Format("SelectionMode = {0}", fsMode)); pm.SetValue(FindSelectionModeKey, fsMode, false); return(NextCommand); }
protected override Script.IScriptCommand executeInner(ParameterDic pm, ItemsControl sender, RoutedEventArgs evnt, IUIInput input, IList <IUIInputProcessor> inpProcs) { var scp = ControlUtils.GetScrollContentPresenter(sender); if (scp != null) { AdornerLayer adornerLayer = ControlUtils.GetAdornerLayer(sender); switch (AdornerMode) { case UIEventHub.AdornerMode.Attach: if (adornerLayer == null) { return(ResultCommand.Error(new Exception("Adorner layer not found."))); } if (UIEventHubProperties.GetSelectionAdorner(scp) == null) { Window parentWindow = UITools.FindAncestor <Window>(sender); Point scpPos = scp.TranslatePoint(new Point(0, 0), sender); //Create and register adorner. SelectionAdorner adorner = new SelectionAdorner(scp) { //AdjustVector = new Vector(-scpPos.X, -scpPos.Y) }; pm.SetValue(SelectionAdornerKey, adorner); UIEventHubProperties.SetSelectionAdorner(scp, adorner); UIEventHubProperties.SetLastScrollContentPresenter(sender, scp); //For used when detach. adornerLayer.Add(adorner); } break; case UIEventHub.AdornerMode.Detach: var lastScp = UIEventHubProperties.GetLastScrollContentPresenter(sender); //For used when detach. var lastAdorner = UIEventHubProperties.GetSelectionAdorner(scp); if (lastAdorner != null) { adornerLayer.Remove(lastAdorner); } UIEventHubProperties.SetLastScrollContentPresenter(sender, null); UIEventHubProperties.SetSelectionAdorner(scp, null); pm.SetValue <Object>(SelectionAdornerKey, null); break; case UIEventHub.AdornerMode.Update: var updateAdorner = pm.GetValue <SelectionAdorner>(SelectionAdornerKey) ?? UIEventHubProperties.GetSelectionAdorner(scp); if (updateAdorner == null) { return(ResultCommand.Error(new Exception("Adorner not found."))); } updateAdorner.IsSelecting = UIEventHubProperties.GetIsSelecting(sender); Point startAdjusted = pm.GetValue <Point>("{StartPosition}"); Point current = pm.GetValue <Point>(CurrentPositionKey); updateAdorner.SetValue(SelectionAdorner.StartPositionProperty, startAdjusted); updateAdorner.SetValue(SelectionAdorner.EndPositionProperty, current); break; } } return(NextCommand); }
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); }