Ejemplo n.º 1
0
        protected override void OnMouseLeftButtonDown(MouseButtonEventArgs e)
        {
            base.OnMouseLeftButtonDown(e);

            adorner        = new RectAdorner(this);
            adorner.Origin = e.GetPosition(this);
            adorner.Show();
            Mouse.Capture(this);
        }
Ejemplo n.º 2
0
        protected override void OnPreviewMouseLeftButtonUp(MouseButtonEventArgs e)
        {
            base.OnPreviewMouseLeftButtonUp(e);

            if (Mouse.Captured == null)
            {
                return;
            }
            Mouse.Capture(null);
            adorner.Hide();
            var origin = adorner.Origin;
            var dest   = adorner.Destination;

            adorner = null;

            List <MyMultiSelecterItem> hitItems = new List <MyMultiSelecterItem>();

            VisualTreeHelper.HitTest(
                this,
                new HitTestFilterCallback((d) =>
            {
                if (d is MyMultiSelecterItem)
                {
                    return(HitTestFilterBehavior.ContinueSkipChildren);
                }
                else
                {
                    return(HitTestFilterBehavior.ContinueSkipSelf);
                }
            }),
                new HitTestResultCallback((result) =>
            {
                var geometryResult = result as GeometryHitTestResult;
                if (geometryResult == null)
                {
                    return(HitTestResultBehavior.Continue);
                }

                if (geometryResult.IntersectionDetail != IntersectionDetail.Empty)
                {
                    hitItems.Add(geometryResult.VisualHit as MyMultiSelecterItem);
                }
                return(HitTestResultBehavior.Continue);
            }),
                new GeometryHitTestParameters(new RectangleGeometry(new Rect(origin, dest))));

            var oldSelectedVMs = SelectedItems.OfType <object>().ToList();

            BeginUpdateSelectedItems();
            SelectedItems.Clear();
            foreach (var item in hitItems)
            {
                SelectedItems.Add(ItemContainerGenerator.ItemFromContainer(item));
            }
            foreach (var oldSelectedVM in oldSelectedVMs)
            {
                var oldSelected = ItemContainerGenerator.ContainerFromItem(oldSelectedVM) as MyMultiSelecterItem;
                if (oldSelected != null)
                {
                    oldSelected.IsSelected = false;
                }
            }
            foreach (var selected in hitItems)
            {
                selected.IsSelected = true;
            }
            EndUpdateSelectedItems();
        }