Esempio n. 1
0
        public void Receive(DependencyObject value)
        {
            var control = (UIElement) value;
            control.AllowDrop = true;

            var window = Window.GetWindow(value);
            DragAdorner adorner=null;

            var createAdorner = Observable.FromEventPattern<DragEventHandler, DragEventArgs>
                (h => control.PreviewDragEnter += h, h => control.PreviewDragEnter -= h)
                .Select(ev => ev.EventArgs)
                .Subscribe(e =>
                {
                    var files = (string[])e.Data.GetData(DataFormats.FileDrop);
                    var container = new FileDropContainer(files);
                    var contentPresenter = new ContentPresenter {Content = container};

                    adorner = new DragAdorner(control, contentPresenter);
                });
            
            var clearAdorner = Observable.FromEventPattern<DragEventHandler, DragEventArgs>(h => control.PreviewDragLeave += h, h => control.PreviewDragLeave -= h).ToUnit()
                .Merge(Observable.FromEventPattern<DragEventHandler, DragEventArgs>(h => control.PreviewDrop += h, h => control.PreviewDrop -= h).ToUnit())
                .Subscribe(e =>
                {
                    if (adorner == null) return;
                    adorner.Detatch();
                    adorner = null;
                });

            var updatePositionOfAdornment = Observable.FromEventPattern<DragEventHandler, DragEventArgs>
                    (h => control.PreviewDragOver += h, h => control.PreviewDragOver -= h)
                    .Select(ev => ev.EventArgs)
                    .Where(_=>adorner!=null)
                    .Subscribe(e => adorner.MousePosition = e.GetPosition(window));
            
            var dropped = Observable.FromEventPattern<DragEventHandler, DragEventArgs>
                (h => control.Drop += h, h => control.Drop -= h)
                .Select(ev => ev.EventArgs)
                .SelectMany(e =>
                {
                    if (!e.Data.GetDataPresent(DataFormats.FileDrop))
                        return Enumerable.Empty<FileInfo>();

                    // Note that you can have more than one file.
                    var files = (string[]) e.Data.GetData(DataFormats.FileDrop);
                    return files.Select(f => new FileInfo(f));
                })
                .SubscribeSafe(_fileDropped);


            _cleanUp.Disposable = Disposable.Create(() =>
            {
                updatePositionOfAdornment.Dispose();
                clearAdorner.Dispose();
                createAdorner.Dispose();
                dropped.Dispose();
                _fileDropped.OnCompleted();
            });
        }
Esempio n. 2
0
        private void InitializeDragAdorner(UIElement itemsControl, object dragData, Point startPosition)
        {
            if (DataTemplate == null)
            {
                return;
            }
            if (_myDragAdorner != null)
            {
                return;
            }

            var adornerLayer = AdornerLayer.GetAdornerLayer(itemsControl);

            if (adornerLayer == null)
            {
                return;
            }

            _myDragAdorner = new DragAdorner(dragData, DataTemplate, itemsControl, adornerLayer);
            _myDragAdorner.UpdatePosition(startPosition.X, startPosition.Y);
        }
Esempio n. 3
0
        AdornerLayer InitializeAdornerLayer(ListViewItem itemToDrag)
        {
            // Create a brush which will paint the ListViewItem onto
            // a visual in the adorner layer.
            VisualBrush brush = new VisualBrush(itemToDrag);

            // Create an element which displays the source item while it is dragged.
            this.dragAdorner = new DragAdorner(this.listView, itemToDrag.RenderSize, brush);

            // Set the drag adorner's opacity.
            this.dragAdorner.Opacity = this.DragAdornerOpacity;

            AdornerLayer layer = AdornerLayer.GetAdornerLayer(this.listView);

            layer.Add(dragAdorner);

            // Save the location of the cursor when the left mouse button was pressed.
            this.ptMouseDown = MouseUtilities.GetMousePosition(this.listView);

            return(layer);
        }
Esempio n. 4
0
        private void selectionBeginDrag(MouseEventArgs e)
        {
            //ListView listView = this.listbox;
            //ListViewItem listViewItem =
            //    FindAncestorOrSelf<ListViewItem>((DependencyObject)e.OriginalSource);

            ListView     listView     = this.selectionlistbox;
            ListViewItem listViewItem =
                FindAncestorOrSelf <ListViewItem>((DependencyObject)e.OriginalSource);

            if (listViewItem == null)
            {
                return;
            }

            // get the data for the ListViewItem
            ImageEntry name = (ImageEntry)selectionlistbox.ItemContainerGenerator.ItemFromContainer(listViewItem);

            //setup the drag adorner.
            selectionInitialiseAdorner(listViewItem);

            //add handles to update the adorner.
            fileslistbox.PreviewDragOver += selectionListViewDragOver;
            fileslistbox.DragLeave       += selectionListViewDragLeave;
            fileslistbox.DragEnter       += selectionListViewDragEnter;

            DataObject      data = new DataObject("myFormat", name);
            DragDropEffects de   = DragDrop.DoDragDrop(this.fileslistbox, data, DragDropEffects.Move);

            //cleanup
            fileslistbox.PreviewDragOver -= selectionListViewDragOver;
            fileslistbox.DragLeave       -= selectionListViewDragLeave;
            fileslistbox.DragEnter       -= selectionListViewDragEnter;

            if (_adorner != null)
            {
                AdornerLayer.GetAdornerLayer(listView).Remove(_adorner);
                _adorner = null;
            }
        }
Esempio n. 5
0
        private void StartDragTextBlock(object sender, MouseButtonEventArgs e)
        {
            TextBlock tb = (TextBlock)sender;

            DragScope = Application.Current.MainWindow.Content as FrameworkElement;
            bool previousDrop = DragScope.AllowDrop;

            DragScope.AllowDrop = true;
            DragEventHandler draghandler = new DragEventHandler(Window1_DragOver);

            DragScope.PreviewDragOver += draghandler;
            DragEventHandler dragleavehandler = new DragEventHandler(DragScope_DragLeave);

            DragScope.DragLeave += dragleavehandler;
            QueryContinueDragEventHandler queryhandler = new QueryContinueDragEventHandler(DragScope_QueryContinueDrag);

            DragScope.QueryContinueDrag += queryhandler;

            _adorner = new DragAdorner(DragScope, (UIElement)tb, true, 0.5);
            _layer   = AdornerLayer.GetAdornerLayer(DragScope as Visual);
            _layer.Add(_adorner);

            IsDragging        = true;
            _dragHasLeftScope = false;

            String          content = tb.Tag.ToString();
            DataObject      data    = new DataObject(System.Windows.DataFormats.Text.ToString(), content);
            DragDropEffects de      = DragDrop.DoDragDrop(tb, data, DragDropEffects.Move);

            // Clean up our mess :)
            DragScope.AllowDrop = previousDrop;
            AdornerLayer.GetAdornerLayer(DragScope).Remove(_adorner);
            _adorner = null;

            DragScope.DragLeave         -= dragleavehandler;
            DragScope.QueryContinueDrag -= queryhandler;
            DragScope.PreviewDragOver   -= draghandler;

            IsDragging = false;
        }
        public override IScriptCommand Execute(ParameterDic pm)
        {
            DragAdorner       dragAdorner      = pm.GetValue <DragAdorner>(AdornerKey);
            DragDropEffectsEx supportedEffects = pm.GetValue <DragDropEffectsEx>(SupportedEffectsKey, DragDropEffectsEx.All);
            DragDropEffectsEx defaultEffect    = pm.GetValue <DragDropEffectsEx>(DefaultEffectKey, DragDropEffectsEx.Copy);

            RoutedEventHandler ContextMenu_Closed = null;

            ContextMenu_Closed = (o, e) =>
            {
                dragAdorner.ContextMenu.RemoveHandler(ContextMenu.ClosedEvent, ContextMenu_Closed);
                pm.SetValue(ResultEffectKey, dragAdorner.DragDropEffect);
                ScriptRunner.RunScriptAsync(pm, OnCloseCommand);
            };


            dragAdorner.SetSupportedDragDropEffects(supportedEffects, defaultEffect);
            dragAdorner.ContextMenu.AddHandler(ContextMenu.ClosedEvent, ContextMenu_Closed);
            dragAdorner.ContextMenu.IsOpen = true;

            return(NextCommand);
        }
Esempio n. 7
0
        private void treeView_PreviewMouseMove(object sender, MouseEventArgs e)
        {
            var item = (Item)treeView.SelectedItem;

            if (item != null && item is InstanceItem && item != NoneItem && e.LeftButton == MouseButtonState.Pressed)
            {
                Vector offset = e.GetPosition(null) - dragStart;

                // Start drag if mouse was held for a minimum distance
                if (Math.Abs(offset.X) > SystemParameters.MinimumHorizontalDragDistance ||
                    Math.Abs(offset.Y) > SystemParameters.MinimumVerticalDragDistance)
                {
                    // Allow dropping anywhere within the window
                    Window mainWindow = Application.Current.MainWindow;
                    mainWindow.AllowDrop = true;

                    // Create item ghost
                    var template  = new DataTemplate(typeof(InstanceItem));
                    var textBlock = new FrameworkElementFactory(typeof(TextBlock));
                    textBlock.SetBinding(TextBlock.TextProperty, new Binding("DisplayName"));
                    template.VisualTree = textBlock;
                    var adornedElement = (UIElement)mainWindow.Content;
                    var adornerLayer   = AdornerLayer.GetAdornerLayer(adornedElement);
                    dragAdorner = new DragAdorner(item, template, adornedElement, adornerLayer);

                    mainWindow.PreviewDragOver += MainWindow_PreviewDragOver;

                    // Perform drag and drop
                    DataObject data = new DataObject(typeof(InstanceItem), item);
                    DragDrop.DoDragDrop(treeView, data, DragDropEffects.Move);

                    // Cleanup handlers
                    mainWindow.PreviewDragOver -= MainWindow_PreviewDragOver;
                    dragAdorner.Detach();
                    mainWindow.AllowDrop = false;
                }
            }
        }
Esempio n. 8
0
        private AdornerLayer InitializeAdornerLayer(ListViewItem itemToDrag)
        {
            // Create a brush which will paint the ListViewItem onto
            // a visual in the adorner layer.
            var brush = new VisualBrush(itemToDrag);

            // Create an element which displays the source item while it is dragged.
// ReSharper disable UseObjectOrCollectionInitializer
            dragAdorner = new DragAdorner(listView, itemToDrag.RenderSize, brush);
// ReSharper restore UseObjectOrCollectionInitializer

            // Set the drag adorner's opacity.
            dragAdorner.Opacity = DragAdornerOpacity;

            AdornerLayer layer = AdornerLayer.GetAdornerLayer(listView);

            layer.Add(dragAdorner);

            // Save the location of the cursor when the left mouse button was pressed.
            ptMouseDown = MouseUtilities.GetMousePosition(listView);

            return(layer);
        }
Esempio n. 9
0
        private static void UpdateDragAdorner(IDropInfo dropInfo, DragEventArgs e)
        {
            if (dropInfo.Effects == DragDropEffects.None)
            {
                DragAdorner = null;
                return;
            }

            if (DragAdorner == null && _dragInfo != null)
            {
                var sourceElement = e.Source as UIElement;

                CreateDragAdorner(sourceElement);
            }

            if (DragAdorner == null)
            {
                return;
            }

            DragAdorner.MousePosition = e.GetPosition(DragAdorner.AdornedElement);
            DragAdorner.InvalidateVisual();
        }
Esempio n. 10
0
        void FinishDragOperation(ListViewItem draggedItem, AdornerLayer adornerLayer, bool isDragFullyFinished)
        {
            // Let the ListViewItem know that it is not being dragged anymore.
            ListViewItemDragState.SetIsBeingDragged(draggedItem, false);

            this.IsDragInProgress = false;

            if (this.ItemUnderDragCursor != null)
            {
                this.ItemUnderDragCursor = null;
            }

            // Remove the drag adorner from the adorner layer.
            if (adornerLayer != null)
            {
                adornerLayer.Remove(this.dragAdorner);
                this.dragAdorner = null;
            }

            if (IsDeleteSourceItem && isDragFullyFinished && this.listView.ItemsSource is ObservableCollection <ItemType> collection)
            {
                collection.RemoveAt(this.listView.SelectedIndex);
            }
        }
        private void listBoxItem_PreviewMouseMove(object sender, MouseEventArgs e)
        {
            var lbi = sender as ListBoxItem;

            if (e.LeftButton == MouseButtonState.Pressed && dragGhost == null && dragItem == lbi)
            {
                var nowPos = e.GetPosition(lbi);
                if (Math.Abs(nowPos.X - dragStartPos.X) > SystemParameters.MinimumHorizontalDragDistance ||
                    Math.Abs(nowPos.Y - dragStartPos.Y) > SystemParameters.MinimumVerticalDragDistance)
                {
                    ItemList.AllowDrop = true;

                    var layer = AdornerLayer.GetAdornerLayer(ItemList);
                    dragGhost = new DragAdorner(ItemList, lbi, 0.5, dragStartPos);
                    layer.Add(dragGhost);
                    DragDrop.DoDragDrop(lbi, lbi, DragDropEffects.Move);
                    layer.Remove(dragGhost);
                    dragGhost = null;
                    dragItem  = null;

                    ItemList.AllowDrop = false;
                }
            }
        }
        private void AddReceiveNotifycationCallBack(AddReceiveInfo info)
        {
            //清理工作
            AdornerLayer.GetAdornerLayer(this._dragScope).Remove(this._adorner);
            this._adorner = null;

            this._dragScope.MouseMove -= draghandler;
            _isMouseLeftButtonDown = false;
        }
Esempio n. 13
0
        private void StartDrag(MouseEventArgs mouseEvent, TaxonViewModel taxon, FrameworkElement item, FrameworkElement dropScope)
        {
            _dropScope = dropScope;
            bool previousDrop = _dropScope.AllowDrop;
            _dropScope.AllowDrop = true;

            DragEventHandler drophandler = new DragEventHandler(_dragScope_Drop);
            _dropScope.Drop += drophandler;

            DragEventHandler draghandler = new DragEventHandler(DropSink_DragOver);
            _dropScope.PreviewDragOver += draghandler;

            DragEventHandler dragleavehandler = new DragEventHandler(DragScope_DragLeave);
            _dropScope.DragLeave += dragleavehandler;

            QueryContinueDragEventHandler queryhandler = new QueryContinueDragEventHandler(DragScope_QueryContinueDrag);
            _dropScope.QueryContinueDrag += queryhandler;

            var previewHandler = new DragEventHandler((s, evt) => {
                if (!IsUnlocked) {
                    evt.Effects = DragDropEffects.None;
                } else {
                    evt.Effects = DragDropEffects.Move;
                }
                evt.Handled = true;
            });

            _dropScope.PreviewDragEnter += previewHandler;
            _dropScope.PreviewDragOver += previewHandler;

            _adorner = new DragAdorner(_dropScope, item, true, 0.5, mouseEvent.GetPosition(item));
            _layer = AdornerLayer.GetAdornerLayer(_dropScope as Visual);
            _layer.Add(_adorner);
            _IsDragging = true;

            if (taxon != null && !string.IsNullOrWhiteSpace(taxon.TaxaFullName)) {
                DataObject data = new DataObject("Taxon", taxon);
                data.SetData(PinnableObject.DRAG_FORMAT_NAME, Owner.CreatePinnableTaxon(taxon.TaxaID.Value));
                data.SetData(DataFormats.Text, taxon.TaxaFullName);
                data.SetData(DataFormats.UnicodeText, taxon.TaxaFullName);
                data.SetData(DataFormats.StringFormat, taxon.TaxaFullName);

                if (!IsUnlocked) {
                    lblHeader.Visibility = Visibility.Visible;
                }

                // Actually kick off the drag drop here!
                DragDropEffects de = DragDrop.DoDragDrop(item, data, DragDropEffects.Move | DragDropEffects.Copy | DragDropEffects.Link );
            }

            _dropScope.AllowDrop = previousDrop;
            AdornerLayer.GetAdornerLayer(_dropScope).Remove(_adorner);
            _adorner = null;

            _dropScope.DragLeave -= dragleavehandler;
            _dropScope.QueryContinueDrag -= queryhandler;
            _dropScope.PreviewDragOver -= draghandler;
            _dropScope.Drop -= drophandler;
            _dropScope.PreviewDragEnter -= previewHandler;
            _dropScope.PreviewDragOver -= previewHandler;

            _IsDragging = false;

            InvalidateVisual();
        }
 private void DisposeAdorner()
 {
     _isDragging = false;
     _dragAdorner?.Dispose();
     _dragAdorner = null;
 }
 public static void SetDragAdorner(DependencyObject obj, DragAdorner value)
 {
     obj.SetValue(DragAdornerProperty, value);
 }
Esempio n. 16
0
        private static void StartDrag(DependencyObject source)
        {
            var dragScope = Application.Current.MainWindow as FrameworkElement;
            //var dragScope = Application.Current.MainWindow.Content as FrameworkElement;
            dragScope.AllowDrop = true;
            SetIsDragging(source, true);

            DataObject dataObject = new DataObject();

            var data = GetDragData(source);
            dataObject.SetData(data);

            var adorner = new DragAdorner(source as UIElement, data, true, 1);

            var layer = AdornerLayer.GetAdornerLayer(((Window)dragScope).Content as FrameworkElement);

            layer.Add(adorner);

            var startPoint = (Point)source.GetValue(StartPointProperty);
            adorner.UpdatePosition(startPoint);

            //var adjustPoint = GetAdjustPoint(source);
            //adorner.UpdatePosition(adjustPoint);

            dragScope.DragOver += (sender, e) =>
            {
                if (adorner != null)
                {
                    adorner.UpdatePosition(e.GetPosition(dragScope));
                }
            };

            DragDrop.DoDragDrop(source, dataObject, DragDropEffects.Move);

            layer.Remove(adorner);
            adorner = null;

            SetIsDragging(source, false);
        }
Esempio n. 17
0
 /// <summary>
 /// Stores drag data
 /// </summary>
 /// <param name="parent"></param>
 /// <param name="data"></param>
 /// <param name="adorner"></param>
 internal DragData(DateButton parent, object data, DragAdorner adorner)
 {
     Parent  = parent;
     Data    = data;
     Adorner = adorner;
 }
Esempio n. 18
0
        private void StartDragInProcAdorner(MouseEventArgs e)
        {
            // Let's define our DragScope .. In this case it is every thing inside our main window ..
            DragScope = Program.ClientWindow.Content as FrameworkElement;
            Debug.Assert(DragScope != null);

            // We enable Drag & Drop in our scope ...  We are not implementing Drop, so it is OK, but this allows us to get DragOver
            bool previousDrop = DragScope != null && DragScope.AllowDrop;
            if (DragScope != null) DragScope.AllowDrop = true;

            // Let's wire our usual events..
            // GiveFeedback just tells it to use no standard cursors..

            GiveFeedbackEventHandler feedbackhandler = DragSourceGiveFeedback;
            GiveFeedback += feedbackhandler;

            // The DragOver event ...
            DragEventHandler draghandler = Window1DragOver;
            DragScope.PreviewDragOver += draghandler;

            // Drag Leave is optional, but write up explains why I like it ..
            DragEventHandler dragleavehandler = DragScopeDragLeave;
            DragScope.DragLeave += dragleavehandler;

            // QueryContinue Drag goes with drag leave...
            QueryContinueDragEventHandler queryhandler = DragScopeQueryContinueDrag;
            DragScope.QueryContinueDrag += queryhandler;

            //Here we create our adorner..
            _adorner = new DragAdorner(DragScope, this, true, 0.5);
            _layer = AdornerLayer.GetAdornerLayer(DragScope);
            _layer.Add(_adorner);

            IsDragging = true;
            _dragHasLeftScope = false;
            //Finally lets drag drop
            //var data = new DataObject(DataFormats.Text, "abcd");
            //DragDropEffects de = DragDrop.DoDragDrop(this, data, DragDropEffects.Move);

            // Clean up our mess :)
            DragScope.AllowDrop = previousDrop;
            AdornerLayer.GetAdornerLayer(DragScope).Remove(_adorner);
            _adorner = null;

            GiveFeedback -= feedbackhandler;
            DragScope.DragLeave -= dragleavehandler;
            DragScope.QueryContinueDrag -= queryhandler;
            DragScope.PreviewDragOver -= draghandler;

            IsDragging = false;
        }
        private static void ItemsControl_PreviewMouseMove(object sender, System.Windows.Input.MouseEventArgs e)
        {
            if (sender is ItemsControl itemsControl)
            {
                DragStatusEnum dragStatus = GetDragStatus(itemsControl);

                switch (dragStatus)
                {
                case DragStatusEnum.None:
                    break;

                case DragStatusEnum.Begining:
                {
                    if (e.LeftButton == System.Windows.Input.MouseButtonState.Pressed)
                    {
                        Vector vector = e.GetPosition(itemsControl) - mouseDownPoint;
                        if (vector.X > dragBeginedOffset || vector.Y > dragBeginedOffset)
                        {
                            SetDragStatus(itemsControl, DragStatusEnum.Draging);

                            if (dragInfo.ItemContainer is FrameworkElement frameworkElement)
                            {
                                frameworkElement.CaptureMouse();
                                if (dragAdorner != null)
                                {
                                    dragAdorner.Detath();
                                }
                                Point offset = e.GetPosition(frameworkElement);
                                dragAdorner = new DragAdorner(itemsControl, frameworkElement, new Point()
                                    {
                                        X = -offset.X, Y = -offset.Y
                                    });
                            }
                        }
                    }
                }
                break;

                case DragStatusEnum.Draging:
                {
                    if (e.LeftButton == System.Windows.Input.MouseButtonState.Pressed)
                    {
                        if (dragAdorner != null)
                        {
                            dragAdorner.UpdatePoint(e.GetPosition(itemsControl));
                        }

                        if (GetItem(itemsControl.ItemContainerGenerator, itemsControl.InputHitTest(e.GetPosition(itemsControl)), out DependencyObject itemContainer, out object item))
                        {
                            if (/*itemContainer != dragInfo.ItemContainer && */ itemContainer is FrameworkElement frameworkElement)
                            {
                                if (lineAdorner == null)
                                {
                                    lineAdorner = new LineAdorner(itemsControl);
                                    lineAdorner.UpdateBrush(GetDropTargetLineBrush(itemsControl), GetDropTargetLineThickness(itemsControl));
                                    lineAdorner.UpdateTarget(e.MouseDevice, frameworkElement, GetItemPanelOrientation(itemsControl));
                                }
                                else
                                {
                                    lineAdorner.UpdateTarget(e.MouseDevice, frameworkElement, GetItemPanelOrientation(itemsControl));
                                }
                            }
                        }
                        else
                        {
                            if (lineAdorner != null)
                            {
                                lineAdorner.ClearTarget();
                            }
                        }

                        e.Handled = true;
                    }
                }
                break;
Esempio n. 20
0
        static void CreateDragAdorner()
        {
            DataTemplate template = GetDragAdornerTemplate(m_DragInfo.VisualSource);

            if (template != null)
            {
                UIElement rootElement = (UIElement)Application.Current.MainWindow.Content;
                UIElement adornment = null;

                if (m_DragInfo.Data is IEnumerable && !(m_DragInfo.Data is string))
                {
                    if (((IEnumerable)m_DragInfo.Data).Cast<object>().Count() <= 10)
                    {
                        ItemsControl itemsControl = new ItemsControl();
                        itemsControl.ItemsSource = (IEnumerable)m_DragInfo.Data;
                        itemsControl.ItemTemplate = template;

                        // The ItemsControl doesn't display unless we create a border to contain it.
                        // Not quite sure why this is...
                        Border border = new Border();
                        border.Child = itemsControl;
                        adornment = border;
                    }
                }
                else
                {
                    ContentPresenter contentPresenter = new ContentPresenter();
                    contentPresenter.Content = m_DragInfo.Data;
                    contentPresenter.ContentTemplate = template;
                    adornment = contentPresenter;
                }

                if (adornment != null)
                {
                    adornment.Opacity = 0.5;
                    DragAdorner = new DragAdorner(rootElement, adornment);
                }
            }
        }
Esempio n. 21
0
    private void AttachToVisualTree()
    {
      // detach from the old tree
      this.DetachFromVisualTree();

      // create the drag adorner for selection operations
      _dragAdorner = new DragAdorner( this );

      // check the template for a SelectionBrush resource
      if( this.Template.Resources.Contains( "SelectionBrush" ) )
        _dragAdorner.Brush = this.Template.Resources[ "SelectionBrush" ] as Brush;

      // check the template for a SelectionPen resource
      if( this.Template.Resources.Contains( "SelectionPen" ) )
        _dragAdorner.Pen = this.Template.Resources[ "SelectionPen" ] as Pen;

      // check the template for key bindings
      if( this.Template.Resources.Contains( "InputBindings" ) )
      {
        InputBindingCollection inputBindings = this.Template.Resources[ "InputBindings" ] as InputBindingCollection;
        if( inputBindings != null )
        {
          this.InputBindings.AddRange( inputBindings );
        }
      }

      // locate the content presenter
      _contentPresenter = VisualTreeHelperEx.FindDescendantByType( this, typeof( ContentPresenter ) ) as ContentPresenter;
      if( _contentPresenter == null )
        throw new InvalidTemplateException( ErrorMessages.GetMessage( "ZoomboxTemplateNeedsContent" ) );

      //locate the vertical scrollBar
      if( _verticalScrollBar != null )
      {
        _verticalScrollBar.Scroll -= this.VerticalScrollBar_Scroll;
      }

      _verticalScrollBar = this.GetTemplateChild( PART_VerticalScrollBar ) as ScrollBar;
      if( _verticalScrollBar == null )
        throw new InvalidTemplateException( ErrorMessages.GetMessage( "Zoombox vertical scrollBar not found." ) );

      _verticalScrollBar.Scroll += this.VerticalScrollBar_Scroll;

      //locate the horizontal scrollBar
      if( _horizontalScrollBar != null )
      {
        _horizontalScrollBar.Scroll -= this.HorizontalScrollBar_Scroll;
      }

      _horizontalScrollBar = this.GetTemplateChild( PART_HorizontalScrollBar ) as ScrollBar;
      if( _horizontalScrollBar == null )
        throw new InvalidTemplateException( ErrorMessages.GetMessage( "Zoombox horizontal scrollBar not found." ) );

      _horizontalScrollBar.Scroll += this.HorizontalScrollBar_Scroll;

      // check the template for an AdornerDecorator
      AdornerLayer al = null;
      AdornerDecorator ad = VisualTreeHelperEx.FindDescendantByType( this, typeof( AdornerDecorator ) ) as AdornerDecorator;
      if( ad != null )
      {
        al = ad.AdornerLayer;
      }
      else
      {
        // look for an inherited adorner layer
        try
        {
          al = AdornerLayer.GetAdornerLayer( this );
        }
        catch( Exception )
        {
        }
      }

      // add the drag adorner to the adorner layer
      if( al != null )
      {
        al.Add( _dragAdorner );
      }

      // TODO: Why is it necessary to walk the visual tree the first time through?
      // If we don't do the following, the content is not laid out correctly (centered) initially.
      VisualTreeHelperEx.FindDescendantWithPropertyValue( this, Button.IsPressedProperty, true );

      // set a reference to the ViewFinder element, if present
      this.SetValue( Zoombox.ViewFinderPropertyKey, this.Template.FindName( "ViewFinder", this ) as FrameworkElement );

      // locate the view finder display panel
      _viewFinderDisplay = VisualTreeHelperEx.FindDescendantByType( this, typeof( ZoomboxViewFinderDisplay ) ) as ZoomboxViewFinderDisplay;

      // if a ViewFinder was specified but no display panel is present, throw an exception
      if( this.ViewFinder != null && _viewFinderDisplay == null )
        throw new InvalidTemplateException( ErrorMessages.GetMessage( "ZoomboxHasViewFinderButNotDisplay" ) );

      // set up the VisualBrush and adorner for the display panel
      if( _viewFinderDisplay != null )
      {
        // create VisualBrush for the view finder display panel
        this.CreateVisualBrushForViewFinder( _content );

        // hook up event handlers for dragging and resizing the viewport
        _viewFinderDisplay.MouseMove += new MouseEventHandler( this.ViewFinderDisplayMouseMove );
        _viewFinderDisplay.MouseLeftButtonDown += new MouseButtonEventHandler( this.ViewFinderDisplayBeginCapture );
        _viewFinderDisplay.MouseLeftButtonUp += new MouseButtonEventHandler( this.ViewFinderDisplayEndCapture );

        // bind the ViewportRect property of the display to the Viewport of the Zoombox
        Binding binding = new Binding( "Viewport" );
        binding.Mode = BindingMode.OneWay;
        binding.Converter = new ViewFinderSelectionConverter( this );
        binding.Source = this;
        _viewFinderDisplay.SetBinding( ZoomboxViewFinderDisplay.ViewportRectProperty, binding );
      }

      // set up event handler to run once the content presenter has been arranged
      _contentPresenter.LayoutUpdated += new EventHandler( this.ContentPresenterFirstArranged );
    }
        private void OnAddScanner(ScreenPropertyPanel panel)
        {
             ScreenRealParams.ScreenLayer.CLineType = ConnectLineType.Auto;
            int cols = AddColsCount;
            int rows = AddRowsCount;
            ScanBoardProperty scanBdProp = SelectedScannerConfig.ScanBdProp;
            int width = scanBdProp.Width;
            int height = scanBdProp.Height;


            _isMouseLeftButtonDown = true;

            //拖动的区域
            this._dragScope = Application.Current.Windows[Application.Current.Windows.Count-1].Content as FrameworkElement;

            //是否可以拖放
            this._dragScope.AllowDrop = true;
            draghandler = new MouseEventHandler(DragScope_PreviewDragOver);
            //加载处理拖放的路由事件
            this._dragScope.MouseMove += draghandler;
            //鼠标跟随效果的装饰器
            Point mousePoint = new Point();
            mousePoint = Mouse.GetPosition(this._dragScope);
            this._adorner = new DragAdorner(this._dragScope, width * Math.Pow(SmartLCTViewModeBase.IncreaseOrDecreaseValue, IncreaseOrDecreaseIndex), height * Math.Pow(SmartLCTViewModeBase.IncreaseOrDecreaseValue, IncreaseOrDecreaseIndex), rows, cols, mousePoint, 0.5);
            this._adorner.LeftOffset = mousePoint.X;
            this._adorner.TopOffset = mousePoint.Y;
            this._layer = AdornerLayer.GetAdornerLayer(this._dragScope as Visual);
            this._layer.Add(this._adorner);

            NotificationMessageAction<AddReceiveInfo> nsa =
            new NotificationMessageAction<AddReceiveInfo>(this, new AddReceiveInfo(rows, cols, SelectedScannerConfig), MsgToken.MSG_ADDRECEIVE, AddReceiveNotifycationCallBack);
            Messenger.Default.Send(nsa, MsgToken.MSG_ADDRECEIVE);
        }
Esempio n. 23
0
        private void canvas_Drop(object sender, DragEventArgs e)
        {
            SpaceObject so = null;

            if (e.Data.GetDataPresent(typeof(SpaceObject)))
            {
                so = e.Data.GetData(typeof(SpaceObject)) as SpaceObject;
            }
            else if (e.Data.GetDataPresent(typeof(BorderAdorner)))
            {
                so = SelectedSpaceObject as SpaceObject;
            }
            else if (e.Data.GetDataPresent(typeof(GroupBox)))
            {
                GroupBox obj = e.Data.GetData(typeof(GroupBox)) as GroupBox;
                if (obj != null)
                {
                    UnmappableObject newObj = new UnmappableObject();
                    newObj.CommandName = obj.Tag as string;

                    AddSpaceObjectEvents(newObj);
                    //Need only to add delete support at this point.
                    CommandsAndConditions.Add(newObj);
                }
            }

            if (so != null)
            {
                FrameworkElement dscope  = DragHelper.GetDragScope(so);
                DragAdorner      adorner = null;
                if (dscope != null)
                {
                    adorner = DragHelper.GetDragAdorner(dscope);
                }
                bool DoAdd = false;

                if (so.Tag == null)
                {
                    SpaceObject so2 = new SpaceObject();
                    so2.ObjectType = so.ObjectType;
                    so2.Tag        = "xxx";
                    SetSpaceObjectSize(so2);
                    AddSpaceObjectEvents(so2);
                    //so2.ObjectName = "test";
                    so = so2;
                    //so.X = Canvas.GetLeft(so);
                    //so.Z = Canvas.GetTop(so);
                    //Raise added (needs to get to Xml))

                    DoAdd = true;
                }


                if (!canvas.Children.Contains(so))
                {
                    canvas.Children.Add(so);
                }
                //Point wrkP = DragHelper.GetRelativeMousePoint(so); no
                Point wrkP = e.GetPosition(canvas);
                if (adorner != null)
                {
                    //wrkP = new Point(
                    //    adorner.LeftOffset - (ItemPool.ActualWidth + gridSplit.ActualWidth) + canvasScroll.HorizontalOffset,
                    //    adorner.TopOffset + canvasScroll.VerticalOffset);


                    wrkP = new Point(
                        adorner.LeftOffset + canvasScroll.HorizontalOffset,
                        adorner.TopOffset + canvasScroll.VerticalOffset);
                }



                so.X = wrkP.X / zoomFactor;
                so.Z = wrkP.Y / zoomFactor;


                Canvas.SetTop(so, wrkP.Y);
                Canvas.SetLeft(so, wrkP.X);

                if (DoAdd)
                {
                    this.RaiseEvent(new RoutedEventArgs(ObjectAddedEvent, so));
                }
                else
                {
                    this.RaiseEvent(new RoutedEventArgs(ObjectMovedEvent, so));
                }
                //this.Dispatcher.BeginInvoke(new Action<SpaceObject>(SetSpaceObjectSize), System.Windows.Threading.DispatcherPriority.Loaded, so);
            }
        }
Esempio n. 24
0
 public void StartDragging() {
    var adorner = new DragAdorner(Shell.Content as UIElement, this);
    State = ScriptBlockState.Moving;
    DragDrop.DoDragDrop(this, this, DragDropEffects.All);
    State = ScriptBlockState.Selected;
    adorner.Close();
 }
Esempio n. 25
0
        public void Receive(DependencyObject value)
        {
            if (_isLoaded || null == value)
            {
                return;
            }

            _isLoaded = true;

            var control = value as UIElement;

            if (null == control)
            {
                return;
            }

            control.AllowDrop = true;

            var         window  = Window.GetWindow(value);
            DragAdorner adorner = null;

            var createAdorner = Observable.FromEventPattern <DragEventHandler, DragEventArgs>
                                    (h => control.PreviewDragEnter += h, h => control.PreviewDragEnter -= h)
                                .Select(ev => ev.EventArgs)
                                .Subscribe(e =>
            {
                var files            = (string[])e.Data.GetData(DataFormats.FileDrop);
                var container        = new FileDropContainer(files);
                var contentPresenter = new ContentPresenter {
                    Content = container
                };

                adorner = new DragAdorner(control, contentPresenter);
            });

            var clearAdorner = Observable.FromEventPattern <DragEventHandler, DragEventArgs>(h => control.PreviewDragLeave += h, h => control.PreviewDragLeave -= h).ToUnit()
                               .Merge(Observable.FromEventPattern <DragEventHandler, DragEventArgs>(h => control.PreviewDrop += h, h => control.PreviewDrop -= h).ToUnit())
                               .Subscribe(e =>
            {
                if (adorner == null)
                {
                    return;
                }
                adorner.Detatch();

                adorner = null;
            });

            var updatePositionOfAdornment = Observable.FromEventPattern <DragEventHandler, DragEventArgs>
                                                (h => control.PreviewDragOver += h, h => control.PreviewDragOver -= h)
                                            .Select(ev => ev.EventArgs)
                                            .Where(_ => adorner != null)
                                            .Subscribe(e => adorner.MousePosition = e.GetPosition(window));

            var dropped = Observable.FromEventPattern <DragEventHandler, DragEventArgs>
                              (h => control.Drop += h, h => control.Drop -= h)
                          .Select(ev => ev.EventArgs)
                          .SelectMany(e =>
            {
                if (!e.Data.GetDataPresent(DataFormats.FileDrop))
                {
                    return(Enumerable.Empty <FileInfo>());
                }

                // Note that you can have more than one file.
                var files = (string[])e.Data.GetData(DataFormats.FileDrop);
                return(files.Select(f => new FileInfo(f)));
            })
                          .SubscribeSafe(_fileDropped);

            _cleanUp.Disposable = Disposable.Create(() =>
            {
                updatePositionOfAdornment.Dispose();
                clearAdorner.Dispose();
                createAdorner.Dispose();
                dropped.Dispose();
                _fileDropped.OnCompleted();
            });
        }
Esempio n. 26
0
        private void TabStackPanelPreviewMouseDown(object sender, MouseButtonEventArgs e)
        {
            if (EditorTabs.Count <= 1)
            {
                return;
            }

            var textBlock = e.Source as TextBlock;

            if (textBlock == null)
            {
                return;
            }

            var stackPanel = textBlock.Parent as StackPanel;

            if (stackPanel == null)
            {
                return;
            }

            var contentPresenter = stackPanel.TemplatedParent as ContentPresenter;

            if (contentPresenter == null)
            {
                return;
            }

            _tabDragTimer          = new Timer(500);
            _tabDragTimer.Elapsed += (o, args) =>
            {
                Dispatcher.Invoke(() =>
                {
                    if (Mouse.PrimaryDevice.LeftButton != MouseButtonState.Pressed)
                    {
                        return;
                    }

                    _tabDragTimer.Stop();
                    _tabDragTimer.Dispose();
                    _tabDragTimer = null;

                    _dragAdorner = new DragAdorner(TopWindowGrid, CreateScriptDragAdornerElement(textBlock.Text))
                    {
                        MousePosition = e.GetPosition(this)
                    };

                    DragOver += TopWindowGridOnDragOver;


                    DragDrop.DoDragDrop(contentPresenter, contentPresenter, DragDropEffects.All);


                    DragOver -= TopWindowGridOnDragOver;

                    _dragAdorner.Remove();

                    _dragAdorner = null;
                });
            };
            _tabDragTimer.Start();
        }