static Point GetScrollbarPosition(ScrollContentPresenter p) { ScrollViewer scrollViewer = UITools.FindAncestor <ScrollViewer>(p); return(new Point(p.ActualWidth / scrollViewer.ViewportWidth * scrollViewer.HorizontalOffset, p.ActualHeight / scrollViewer.ViewportHeight * scrollViewer.VerticalOffset)); }
protected override void OnPreviewMouseLeftButtonDown(System.Windows.Input.MouseButtonEventArgs e) { base.OnPreviewMouseLeftButtonDown(e); //PreviewPanel ppanel = UITools.FindAncestor<PreviewPanel>(this); //Selector.SetIsSelected(this, true); (UITools.FindAncestor <PreviewPanelBase>(this)).SelectedValue = DataContext; }
public static bool GetIsDragging(ListView sender) { ItemsPresenter ip = UITools.FindVisualChild <ItemsPresenter>(sender); ScrollContentPresenter p = UITools.FindAncestor <ScrollContentPresenter>(ip); return(GetIsDragging(p)); }
static void OnMouseUp(object sender, MouseButtonEventArgs e) { ScrollContentPresenter p = getScrollContentPresenter(sender); if (GetIsDragging(p)) { EndDragging(p); Mouse.Capture(null); UITools.FindAncestor <ListView>(p).Focus(); ListViewItem curSelectedItem = getSelectedItem(p, Mouse.GetPosition(p)); if (curSelectedItem != null && curSelectedItem.Equals(_itemUnderMouse)) { ListView lvControl = UITools.FindAncestor <ListView>(p); ClearSelection(lvControl); _itemUnderMouse.IsSelected = true; } } if (Point.Subtract(GetStartPosition(p), Mouse.GetPosition(p)).Length < 10.0d) { ListView lvControl = UITools.FindAncestor <ListView>(p); ClearSelection(lvControl); } if (_firstSelectedItem != null) { _firstSelectedItem.IsSelected = true; } _firstSelectedItem = null; SetIsDragging(p, false); }
static void UpdatePosition(ScrollContentPresenter p, bool highlightOnly) { ScrollViewer scrollViewer = UITools.FindAncestor <ScrollViewer>(p); SelectionAdorner _adorner = GetSelectionAdorner(p); if (GetIsDragging(p)) { Point startScrollbarPosition = GetStartScrollbarPosition(p); Point curScrollbarPosition = GetScrollbarPosition(p); Point startPosition = GetStartPosition(p); Point curPosition = Mouse.GetPosition(p); if (!_adorner.IsSelecting) { if (Math.Abs(startPosition.X - curPosition.X) > SystemParameters.MinimumHorizontalDragDistance || Math.Abs(startPosition.Y - curPosition.Y) > SystemParameters.MinimumVerticalDragDistance) { _adorner.IsSelecting = true; Mouse.Capture(p); } } else { Vector offset = Point.Subtract(startScrollbarPosition, curScrollbarPosition); _adorner.StartPosition = Point.Add(startPosition, offset); _adorner.EndPosition = curPosition; UpdateSelection(p, new Rect( new Point(startPosition.X + startScrollbarPosition.X, startPosition.Y + startScrollbarPosition.Y), new Point(curPosition.X + curScrollbarPosition.X, curPosition.Y + curScrollbarPosition.Y)), highlightOnly); } } }
static void OnPreviewMouseDown(object sender, MouseButtonEventArgs e) { if (e.ChangedButton != MouseButton.Left || e.ClickCount > 1) { return; } //DependencyObject obj = (DependencyObject)e.OriginalSource; //while (obj != null) //{ // Debug.WriteLine(obj); // obj = VisualTreeHelper.GetParent(obj); //} //0.4: Fixed click on GridView Header recognize as drag start. bool isOverGridViewHeader = UITools.FindAncestor <GridViewColumnHeader>(e.OriginalSource as DependencyObject) != null; bool isOverScrollBar = UITools.FindAncestor <ScrollBar>(e.OriginalSource as DependencyObject) != null; bool spButtonPressed = Keyboard.IsKeyDown(Key.LeftShift) || Keyboard.IsKeyDown(Key.RightShift) || Keyboard.IsKeyDown(Key.LeftCtrl) || Keyboard.IsKeyDown(Key.RightCtrl); ScrollContentPresenter p = getScrollContentPresenter(sender); _itemUnderMouse = getSelectedItem(p, e.GetPosition(p)); Debug.WriteLine(_itemUnderMouse == null ? "NONE" : _itemUnderMouse.ToString()); if (!spButtonPressed && !isOverScrollBar && !isOverGridViewHeader) { SetStartPosition(p, Mouse.GetPosition(p)); _firstSelectedItem = _itemUnderMouse; _itemAlreadySelected = (_itemUnderMouse != null && _itemUnderMouse.IsSelected); if (!_itemAlreadySelected && e.ClickCount == 1) { BeginDragging(p); e.Handled = true; } e.Handled = true; } else if (Keyboard.IsKeyDown(Key.LeftShift) || Keyboard.IsKeyDown(Key.RightShift)) { ListView lvSender = UITools.FindAncestor <ListView>(sender as DependencyObject); int startIdx = lvSender.SelectedIndex; int endIdx = lvSender.Items.Count - 1; if (_itemUnderMouse != null) { endIdx = lvSender.ItemContainerGenerator.IndexFromContainer(_itemUnderMouse); } if (startIdx != -1 && endIdx != -1) { ClearSelection(lvSender); for (int i = Math.Min(startIdx, endIdx); i <= Math.Max(startIdx, endIdx); i++) { lvSender.SelectedItems.Add(lvSender.Items[i]); } e.Handled = true; } } }
private static void OnScrollChange(object sender, RoutedEventArgs args) { ItemsPresenter ip = UITools.FindVisualChild <ItemsPresenter>(sender as ListView); ScrollContentPresenter p = UITools.FindAncestor <ScrollContentPresenter>(ip); if (GetIsDragging(p) && Mouse.LeftButton == MouseButtonState.Pressed) { UpdatePosition(p, true); } }
public override Style SelectStyle(object item, DependencyObject container) { FileList2 flist = UITools.FindAncestor <FileList2>(container); if (flist != null) { if (!(flist.View is GridView)) { return((Style)flist.FindResource("qz_FileListItem_Style")); } } return(base.SelectStyle(item, container)); }
public override DataTemplate SelectTemplate(object item, DependencyObject container) { StatusbarItem element = UITools.FindAncestor <StatusbarItem>(container); if (element != null) { switch (element.ItemType) { case ItemType.itString: return(element.FindResource("stringTemplate") as DataTemplate); } } return(null); }
static ScrollContentPresenter getScrollContentPresenter(object sender) { if (sender is ListView) { ItemsPresenter ip = UITools.FindVisualChild <ItemsPresenter>(sender as ListView); return(UITools.FindAncestor <ScrollContentPresenter>(ip)); } else if (sender is SelectionAdorner) { return((ScrollContentPresenter)((SelectionAdorner)sender).AdornedElement); } else { return((ScrollContentPresenter)sender); } }
public override void OnApplyTemplate() { base.OnApplyTemplate(); Window AncestorWindow = UITools.FindAncestor <Window>(this); if (AncestorWindow != null) { DependencyPropertyDescriptor waDescriptor = DependencyPropertyDescriptor.FromProperty(Window.IsActiveProperty, typeof(Window)); waDescriptor.AddValueChanged (AncestorWindow, new EventHandler(delegate { WindowIsActive = AncestorWindow.IsActive; })); } }
public override void OnApplyTemplate() { base.OnApplyTemplate(); Window AncestorWindow = UITools.FindAncestor <Window>(this); if (AncestorWindow != null) { InitializeWindowSource(AncestorWindow, null); this.AddHandler(Rectangle.MouseDownEvent, (MouseButtonEventHandler) delegate(object sender, MouseButtonEventArgs e) { if (e.OriginalSource is Rectangle) { e.Handled = true; Rectangle rect = (Rectangle)e.OriginalSource; if (!String.IsNullOrEmpty(rect.Name)) { ResizeDirection resizeDirection = (ResizeDirection)Enum.Parse(typeof(ResizeDirection), rect.Name); ResizeWindow(resizeDirection); } } }); DependencyPropertyDescriptor wsDescriptor = DependencyPropertyDescriptor.FromProperty(Window.WindowStateProperty, typeof(Window)); wsDescriptor.AddValueChanged (AncestorWindow, new EventHandler(delegate { ResizeGripVisibility = AncestorWindow.WindowState == WindowState.Maximized ? Visibility.Collapsed : Visibility.Visible; })); DependencyPropertyDescriptor waDescriptor = DependencyPropertyDescriptor.FromProperty(Window.IsActiveProperty, typeof(Window)); waDescriptor.AddValueChanged (AncestorWindow, new EventHandler(delegate { WindowIsActive = AncestorWindow.IsActive; })); } }
/// <summary> /// Take a container (e.g. listbox) and a position and return the item (e.g. listboxItem) at that spot. /// </summary> /// <param name="container"></param> /// <param name="position"></param> /// <returns></returns> public static I GetItemByPosition <I, C>(C container, Point position) where C : UIElement where I : UIElement { DependencyObject obj = null; //Bug#66 VisualTreeHelper.HitTest( container, (o) => { if (UITools.FindAncestor <I>(o) != null) { return(HitTestFilterBehavior.Continue); } else { return(HitTestFilterBehavior.ContinueSkipSelf); } }, (r) => { obj = r.VisualHit; return(HitTestResultBehavior.Stop); }, new PointHitTestParameters(position)); //if (r == null) return null; //DependencyObject obj = r.VisualHit; while (!(obj is C) && (obj != null)) { obj = VisualTreeHelper.GetParent(obj); if (obj is I) { return(obj as I); } } return(null); }
static void OnMouseMove(object sender, MouseEventArgs e) { ScrollContentPresenter p = getScrollContentPresenter(sender); if (GetIsDragging(p)) { if (e.LeftButton == MouseButtonState.Pressed) { //0.5: Auto Scroll Point mousePos = e.GetPosition(p); IScrollInfo isInfo = UITools.FindVisualChild <Panel>(p) as IScrollInfo; ListView lv = UITools.FindAncestor <ListView>(p); if (isInfo.CanHorizontallyScroll) { if (mousePos.X < 0) { isInfo.SetHorizontalOffset(isInfo.HorizontalOffset - 1); } else if (mousePos.X > lv.ActualWidth) { isInfo.SetHorizontalOffset(isInfo.HorizontalOffset + 1); } } if (isInfo.CanVerticallyScroll) { if (mousePos.Y < 0) { isInfo.SetVerticalOffset(isInfo.VerticalOffset - 1); } else if (mousePos.Y > lv.ActualHeight) //isInfo.ViewportHeight is bugged. { isInfo.SetVerticalOffset(isInfo.VerticalOffset + 1); } } UpdatePosition(p, true); } } }
//static ListViewItem getSelectedItem(ScrollContentPresenter lvSender, Point position) //{ // HitTestResult r = VisualTreeHelper.HitTest(lvSender, position); // if (r == null) return null; // DependencyObject obj = r.VisualHit; // while (!(obj is ListView) && (obj != null)) // { // obj = VisualTreeHelper.GetParent(obj); // if (obj is ListViewItem) // return obj as ListViewItem; // } // return null; //} static ListViewItem getSelectedItem(Visual sender, Point position) { DependencyObject obj = null; //Bug#66 VisualTreeHelper.HitTest( sender, (o) => { if (UITools.FindAncestor <ListViewItem>(o) != null) { return(HitTestFilterBehavior.Continue); } else { return(HitTestFilterBehavior.ContinueSkipSelf); } }, (r) => { obj = r.VisualHit; return(HitTestResultBehavior.Stop); }, new PointHitTestParameters(position)); //if (r == null) return null; //DependencyObject obj = r.VisualHit; while (!(obj is ListBox) && (obj != null)) { obj = VisualTreeHelper.GetParent(obj); if (obj is ListViewItem) { return(obj as ListViewItem); } } return(null); }
public static void OnEnableSelectionpChanged(DependencyObject s, DependencyPropertyChangedEventArgs e) { if (s is ListView) { ListView control = s as ListView; var OnSizeChanged = (RoutedEventHandler) delegate(object sender, RoutedEventArgs args) { ItemsPresenter ip = UITools.FindVisualChild <ItemsPresenter>(sender as ListView); ScrollContentPresenter p = UITools.FindAncestor <ScrollContentPresenter>(ip); EndDragging(p); }; Func <ScrollContentPresenter, AdornerLayer> getAdornerLayer = (p) => { AdornerLayer adornerLayer = AdornerLayer.GetAdornerLayer(p); if (adornerLayer != null) { return(adornerLayer); } ItemsPresenter ip = UITools.FindVisualChild <ItemsPresenter>(s as ListView); AdornerDecorator ad = UITools.FindAncestor <AdornerDecorator>(ip); try { adornerLayer = AdornerLayer.GetAdornerLayer(ad); if (adornerLayer != null) { return(adornerLayer); } } catch { } return(p.AdornerLayer);; }; Action unloadAdorner = () => { ScrollContentPresenter p = GetLastScrollContentPresenter(control); if (p != null) { SelectionAdorner _adorner = GetSelectionAdorner(p); if (_adorner != null) { getAdornerLayer(p).Remove(_adorner); _adorner.PreviewMouseDown -= new MouseButtonEventHandler(OnPreviewMouseDown); _adorner.MouseMove -= new MouseEventHandler(OnMouseMove); _adorner.MouseUp -= new MouseButtonEventHandler(OnMouseUp); } control.MouseUp -= new MouseButtonEventHandler(OnMouseUp); control.MouseMove -= new MouseEventHandler(OnMouseMove); control.RemoveHandler(ListView.SizeChangedEvent, OnSizeChanged); SetSelectionAdorner(p, null); } }; Action attachAdorner = () => { unloadAdorner(); ItemsPresenter ip = UITools.FindVisualChild <ItemsPresenter>(control); ScrollContentPresenter p = UITools.FindAncestor <ScrollContentPresenter>(ip); if (p != null) { SelectionAdorner _adorner = new SelectionAdorner(p); SetSelectionAdorner(p, _adorner); AdornerLayer adornerLayer = getAdornerLayer(p); if (adornerLayer != null) { adornerLayer.Add(_adorner); _adorner.PreviewMouseDown += new MouseButtonEventHandler(OnPreviewMouseDown); _adorner.MouseMove += new MouseEventHandler(OnMouseMove); _adorner.MouseUp += new MouseButtonEventHandler(OnMouseUp); } control.PreviewMouseDown += new MouseButtonEventHandler(OnPreviewMouseDown); control.MouseUp += new MouseButtonEventHandler(OnMouseUp); control.MouseMove += new MouseEventHandler(OnMouseMove); control.AddHandler(ListView.SizeChangedEvent, OnSizeChanged); SetLastScrollContentPresenter(control, p); } }; if ((bool)e.NewValue == true) { if (control.IsLoaded) { attachAdorner(); } else { control.Loaded += delegate { attachAdorner(); } }; control.AddHandler(ScrollViewer.ScrollChangedEvent, new RoutedEventHandler(OnScrollChange)); control.AddHandler(ListView.MouseDownEvent, new RoutedEventHandler(OnMouseDown)); //Monitor view change, and reattach handlers. DependencyPropertyDescriptor viewDescriptor = DependencyPropertyDescriptor.FromProperty(ListView.ViewProperty, typeof(ListView)); viewDescriptor.AddValueChanged (control, delegate { control.Dispatcher.BeginInvoke(DispatcherPriority.Input, attachAdorner); }); } else //If EnableSelection = False { unloadAdorner(); control.RemoveHandler(ScrollViewer.ScrollChangedEvent, new RoutedEventHandler(OnScrollChange)); control.RemoveHandler(ListView.MouseDownEvent, new RoutedEventHandler(OnMouseDown)); SetSelectionAdorner(control, null); } } }
public override void OnApplyTemplate() { base.OnApplyTemplate(); Window AncestorWindow = UITools.FindAncestor <Window>(this); TitlebarContainer titleBarContainer = UITools.FindAncestor <TitlebarContainer>(this); if (AncestorWindow != null) { DependencyPropertyDescriptor descriptor = DependencyPropertyDescriptor.FromProperty(Window.WindowStateProperty, typeof(Window)); descriptor.AddValueChanged (AncestorWindow, new EventHandler(delegate { UIElement restoreButton = (UIElement)this.Template.FindName("restoreButton", this); UIElement maximizeButton = (UIElement)this.Template.FindName("maximizeButton", this); if (AncestorWindow.WindowState == WindowState.Maximized) { restoreButton.Visibility = System.Windows.Visibility.Visible; maximizeButton.Visibility = System.Windows.Visibility.Collapsed; } else { restoreButton.Visibility = System.Windows.Visibility.Collapsed; maximizeButton.Visibility = System.Windows.Visibility.Visible; } })); this.AddHandler(UIElement.MouseLeftButtonDownEvent, (MouseButtonEventHandler) delegate(object sender, MouseButtonEventArgs e) { AncestorWindow.DragMove(); }); this.AddHandler(Control.MouseDoubleClickEvent, (MouseButtonEventHandler) delegate(object sender, MouseButtonEventArgs e) { if (e.LeftButton == MouseButtonState.Pressed) { if (AncestorWindow.WindowState == WindowState.Maximized) { AncestorWindow.WindowState = WindowState.Normal; } else { AncestorWindow.WindowState = WindowState.Maximized; } } }); this.CommandBindings.Add(new CommandBinding(TitlebarCommands.CloseWindowCommand, new ExecutedRoutedEventHandler(delegate { AncestorWindow.Close(); }))); this.CommandBindings.Add(new CommandBinding(TitlebarCommands.MaximizeWindowCommand, new ExecutedRoutedEventHandler(delegate { AncestorWindow.WindowState = WindowState.Maximized; }))); this.CommandBindings.Add(new CommandBinding(TitlebarCommands.MinimizeWindowCommand, new ExecutedRoutedEventHandler(delegate { AncestorWindow.WindowState = WindowState.Minimized; }))); this.CommandBindings.Add(new CommandBinding(TitlebarCommands.RestoreWindowCommand, new ExecutedRoutedEventHandler(delegate { AncestorWindow.WindowState = WindowState.Normal; }))); } }
static void UpdateSelection(ScrollContentPresenter p, Rect selectionBounds, bool highlightOnly) { try { ListView lvControl = UITools.FindAncestor <ListView>(p); if (lvControl != null) { IChildInfo icInfo = UITools.FindVisualChild <Panel>(p) as IChildInfo; List <object> newList = new List <object>(); List <int> newIntList = new List <int>(); if (icInfo != null) { for (int i = 0; i < lvControl.Items.Count; i++) { if (icInfo.GetChildRect(i).IntersectsWith(selectionBounds)) { newList.Add(lvControl.Items[i]); newIntList.Add(i); } } } else //0.4 For GridView, only support selection if drag occur inside the first column if (lvControl.View is GridView) { Point curPos = (Point)PositionCheck(GetSelectionAdorner(p), Mouse.GetPosition(p)); if ((lvControl.View as GridView).Columns.Count > 0) { double col0width = (lvControl.View as GridView).Columns[0].ActualWidth; if (curPos.X < col0width || GetStartPosition(p).X < col0width) { if (_firstSelectedItem == null) { _firstSelectedItem = getSelectedItem(p, curPos); } if (getSelectedItem(p, curPos) != null) { _curSelectedItem = getSelectedItem(p, curPos); } if (_firstSelectedItem != null && _curSelectedItem != null) { int startIdx = lvControl.ItemContainerGenerator.IndexFromContainer(_firstSelectedItem); int endIdx = lvControl.ItemContainerGenerator.IndexFromContainer(_curSelectedItem); for (int i = Math.Min(startIdx, endIdx); i <= Math.Max(startIdx, endIdx); i++) { newList.Add(lvControl.Items[i]); newIntList.Add(i); } } } } } if (highlightOnly) { SetHighlightCount(lvControl, newIntList.Count); HighlightItems(lvControl, newIntList); } else { SetHighlightCount(lvControl, 0); UnhighlightItems(lvControl); UpdateSelectedItems(lvControl, newList); } } } catch { } }