Beispiel #1
0
        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;
 }
Beispiel #3
0
        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);
        }
Beispiel #5
0
        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);
                }
            }
        }
Beispiel #6
0
        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;
                }
            }
        }
Beispiel #7
0
        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);
            }
        }
Beispiel #8
0
            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);
        }
Beispiel #10
0
 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;
                }));
            }
        }
Beispiel #13
0
        /// <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);
        }
Beispiel #14
0
        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);
                }
            }
        }
Beispiel #15
0
        //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);
        }
Beispiel #16
0
        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);
                }
            }
        }
Beispiel #17
0
        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; })));
            }
        }
Beispiel #18
0
        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 { }
        }