コード例 #1
0
        static void present_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
        {
            foreach (var item in ReceivingElements.Where(x => (x.Value == sender.GetType() || x.Value == null) && GetIsMouseOver(x.Key)))
            {
                IDropViewModel dropViewModel = item.Key.DataContext as IDropViewModel;
                dropViewModel.SetValues(sender.GetType(), new object[] { (sender as FrameworkElement).DataContext });

                SetIsMouseOver(item.Key, false);

                ICommand cmdSet = GetSetItemsCommand(item.Key);
                if (cmdSet != null)
                {
                    cmdSet.Execute((sender as FrameworkElement).DataContext);
                }

                (sender as Window).Close();
            }
        }
コード例 #2
0
        static void b_MouseMove(object sender, System.Windows.Input.MouseEventArgs e)
        {
            if (e.MouseDevice.LeftButton == MouseButtonState.Pressed && initObject == sender)
            {
                var currenPoint = e.GetPosition(null);

                if ((startPoint.X > currenPoint.X + 10 || startPoint.X < currenPoint.X - 10) || (startPoint.Y > currenPoint.Y + 10 || startPoint.Y < currenPoint.Y - 10))
                {
                    startPoint = currenPoint;

                    Type typePresentary = GetUseDrag(sender as DependencyObject);

                    //var present = DynamicModuleLambdaCompiler.CreateWindow(typePresentary);
                    var present = (Window)DynamicModuleLambdaCompiler.CreateInstance(typePresentary);

                    if (present != null)
                    {
                        Point p = (sender as Visual).PointToScreen(new Point());
                        //понадобится метрика для расчета текущего положения нового окна


                        //и команда обработки текущего положения
                        ICommand cmdPoint = GetOnPoint((DependencyObject)sender);
                        if (cmdPoint != null)
                        {
                            cmdPoint.Execute(new Tuple <object, Point>(((FrameworkElement)sender).DataContext, p));
                        }
                        else
                        {
                            present.Top  = p.Y;
                            present.Left = p.X;
                        }

                        present.DataContext = (sender as FrameworkElement).DataContext;

                        present.Width = present.Height = (sender as FrameworkElement).ActualWidth;

                        //подключение проверки перемещения окна
                        present.LocationChanged += new EventHandler(present_LocationChanged);

                        present.Focus();
                        present.Topmost = true;

                        if (GetStays(sender as DependencyObject))
                        {
                            present.PreviewMouseLeftButtonUp += new MouseButtonEventHandler(present_MouseLeftButtonUp);
                        }

                        present.Show();
                        present.DragMove();
                        //получается что сдесь мыш была опущена следовательно объект нужно переместить в область управления
                        foreach (var item in ReceivingElements.Where(x => (x.Value == typePresentary || x.Value == null) && GetIsMouseOver(x.Key)))
                        {
                            IDropViewModel dropViewModel = item.Key.DataContext as IDropViewModel;
                            dropViewModel.SetValues(typePresentary, new object[] { (sender as FrameworkElement).DataContext });
                            dropViewModel.SetValues(item.Key, new object[] { (sender as FrameworkElement).DataContext });

                            SetIsMouseOver(item.Key, false);

                            ICommand cmdSet = GetSetItemsCommand(item.Key);
                            if (cmdSet != null)
                            {
                                cmdSet.Execute((sender as FrameworkElement).DataContext);
                            }

                            ICommand cmdSet1 = GetSetItemsCommand((DependencyObject)sender);
                            if (cmdSet1 != null)
                            {
                                cmdSet1.Execute((sender as FrameworkElement).DataContext);
                            }

                            present.Close();
                            break;
                        }

                        //так же забываем про последний сет (не понятно зачем это)
                        //ICommand cmdSetFine = GetSetItemsCommand((DependencyObject)sender);
                        //if (cmdSetFine != null)
                        //    cmdSetFine.Execute(((FrameworkElement)sender).DataContext);

                        //и в итоге если ниодного объекта управления нет проверяем состояние
                        if (!GetStays(sender as DependencyObject))
                        {
                            present.Close();
                        }
                        else
                        {
                            ICommand cmdSetFine = GetSetItemsCommand((DependencyObject)sender);
                            if (cmdSetFine != null)
                            {
                                cmdSetFine.Execute(((FrameworkElement)sender).DataContext);
                            }
                        }
                        initObject = null;

                        Console.WriteLine(present.Left + ";" + present.Top);
                    }
                }
            }
        }