Interaction logic for DragDropAdornerBase.xaml
Inheritance: System.Windows.Controls.UserControl
コード例 #1
0
        private void _adorner_MouseUp(object sender, MouseEventArgs e)
        {
            switch (_adorner.AdornerDropState)
            {
            case DropState.CanDrop:
                try
                {
                    ((Storyboard)_adorner.Resources["canDrop"]).Completed += (s, args) =>
                    {
                        _adornerLayer.Children.Clear();
                        _adornerLayer.Visibility = Visibility.Collapsed;
                    };
                    ((Storyboard)_adorner.Resources["canDrop"]).Begin(_adorner);

                    if (ItemDropped != null)
                    {
                        ItemDropped(_adorner, new DragDropEventArgs(_draggedData));
                    }
                }
                catch (Exception ex)
                { }
                break;

            case DropState.CannotDrop:
                try
                {
                    Storyboard      sb   = _adorner.Resources["cannotDrop"] as Storyboard;
                    DoubleAnimation aniX = sb.Children[0] as DoubleAnimation;
                    aniX.To = _delta.X;
                    DoubleAnimation aniY = sb.Children[1] as DoubleAnimation;
                    aniY.To       = _delta.Y;
                    sb.Completed += (s, args) =>
                    {
                        _adornerLayer.Children.Clear();
                        _adornerLayer.Visibility = Visibility.Collapsed;
                    };
                    sb.Begin(_adorner);
                }
                catch (Exception ex) { }
                break;
            }

            _draggedData = null;
            _adornerLayer.PreviewMouseMove -= new MouseEventHandler(_adorner_MouseMove);
            _adornerLayer.PreviewMouseUp   -= new MouseButtonEventHandler(_adorner_MouseUp);

            if (_adorner != null)
            {
                _adorner.ReleaseMouseCapture();
            }
            _adorner       = null;
            _mouseCaptured = false;
        }
コード例 #2
0
        // Drag = mouse down + move by a certain amount
        private void DragSource_PreviewMouseMove(object sender, MouseEventArgs e)
        {
            if (!_mouseCaptured && _draggedData != null)
            {
                // Only drag when user moved the mouse by a reasonable amount.
                if (DragDropHelper.IsMovementBigEnough(_initialMousePosition, e.GetPosition(_topWindow)))
                {
                    _adorner             = (DragDropAdornerBase)GetDragDropControl(sender as DependencyObject);
                    _adorner.DataContext = _draggedData;
                    _adorner.Opacity     = 0.7;

                    _adornerLayer.Visibility = Visibility.Visible;
                    _adornerLayer.Children.Add(_adorner);
                    _mouseCaptured = Mouse.Capture(_adorner);

                    Canvas.SetLeft(_adorner, _initialMousePosition.X - 20);
                    Canvas.SetTop(_adorner, _initialMousePosition.Y - 15);

                    _adornerLayer.PreviewMouseMove += new MouseEventHandler(_adorner_MouseMove);
                    _adornerLayer.PreviewMouseUp   += new MouseButtonEventHandler(_adorner_MouseUp);
                }
            }
        }
コード例 #3
0
ファイル: DragDropHelper.cs プロジェクト: hansuky/Yuhan
        private void _adorner_MouseUp(object sender, MouseEventArgs e)
        {
            switch (_adorner.AdornerDropState)
            {
                case DropState.CanDrop:
                    try
                    {
                        ((Storyboard)_adorner.Resources["canDrop"]).Completed += (s, args) =>
                        {
                            _adornerLayer.Children.Clear();
                            _adornerLayer.Visibility = Visibility.Collapsed;
                        };
                        ((Storyboard)_adorner.Resources["canDrop"]).Begin(_adorner);

                        if (ItemDropped != null)
                            ItemDropped(_adorner, new DragDropEventArgs(_draggedData));
                    }
                    catch (Exception ex)
                    { }
                    break;
                case DropState.CannotDrop:
                    try
                    {
                        Storyboard sb = _adorner.Resources["cannotDrop"] as Storyboard;
                        DoubleAnimation aniX = sb.Children[0] as DoubleAnimation;
                        aniX.To = _delta.X;
                        DoubleAnimation aniY = sb.Children[1] as DoubleAnimation;
                        aniY.To = _delta.Y;
                        sb.Completed += (s, args) =>
                        {
                            _adornerLayer.Children.Clear();
                            _adornerLayer.Visibility = Visibility.Collapsed;
                        };
                        sb.Begin(_adorner);
                    }
                    catch (Exception ex) { }
                    break;
            }

            _draggedData = null;
            _adornerLayer.PreviewMouseMove -= new MouseEventHandler(_adorner_MouseMove);
            _adornerLayer.PreviewMouseUp -= new MouseButtonEventHandler(_adorner_MouseUp);

            if (_adorner != null)
            {
                _adorner.ReleaseMouseCapture();
            }
            _adorner = null;
            _mouseCaptured = false;
        }
コード例 #4
0
ファイル: DragDropHelper.cs プロジェクト: hansuky/Yuhan
        // Drag = mouse down + move by a certain amount
        private void DragSource_PreviewMouseMove(object sender, MouseEventArgs e)
        {
            if (!_mouseCaptured && _draggedData != null)
            {
                // Only drag when user moved the mouse by a reasonable amount.
                if (DragDropHelper.IsMovementBigEnough(_initialMousePosition, e.GetPosition(_topWindow)))
                {
                    _adorner = (DragDropAdornerBase)GetDragDropControl(sender as DependencyObject);
                    _adorner.DataContext = _draggedData;
                    _adorner.Opacity = 0.7;

                    _adornerLayer.Visibility = Visibility.Visible;
                    _adornerLayer.Children.Add(_adorner);
                    _mouseCaptured = Mouse.Capture(_adorner);

                    Canvas.SetLeft(_adorner, _initialMousePosition.X - 20);
                    Canvas.SetTop(_adorner, _initialMousePosition.Y - 15);

                    _adornerLayer.PreviewMouseMove+=new MouseEventHandler(_adorner_MouseMove);
                    _adornerLayer.PreviewMouseUp += new MouseButtonEventHandler(_adorner_MouseUp);
                }
            }
        }
コード例 #5
0
        public static void DropStateChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
        {
            DragDropAdornerBase myclass = (DragDropAdornerBase)d;

            myclass.StateChangedHandler(d, e);
        }