Esempio n. 1
0
        // Проверка на пересечение с другими элементами в Canvas
        public static bool IsIntersectOnCanvas(UIElement element)
        {
            var currentPos = CustomVisualTreeHelper.PositionElementOnKernelCanvas(element);
            var uIElement  =
                CustomVisualTreeHelper.KernelCanvas.Children.
                Where(e =>
            {
                return((e is IEComponent) && (!e.Equals(element)));
            }).
                FirstOrDefault(e =>
            {
                var currentPos_e = CustomVisualTreeHelper.PositionElementOnKernelCanvas(e);
                return(
                    // Находится ли левый верхний угол элемента (element) в области элемента (e)
                    (currentPos.X >= currentPos_e.X) &&
                    (currentPos.X <= (currentPos_e.X + e.DesiredSize.Width)) &&
                    (currentPos.Y >= currentPos_e.Y) &&
                    (currentPos.Y <= (currentPos_e.Y + e.DesiredSize.Height)) ||
                    // *
                    // Находится ли нижний правый угол элемента (element) в области элемента (e)
                    (currentPos.X + element.DesiredSize.Width >= currentPos_e.X) &&
                    (currentPos.X + element.DesiredSize.Width <= (currentPos_e.X + e.DesiredSize.Width)) &&
                    (currentPos.Y + element.DesiredSize.Height >= currentPos_e.Y) &&
                    (currentPos.Y + element.DesiredSize.Height <= (currentPos_e.Y + e.DesiredSize.Height)) ||
                    // *
                    (currentPos.X + element.DesiredSize.Width >= currentPos_e.X) &&
                    (currentPos.X <= (currentPos_e.X + e.DesiredSize.Width)) &&
                    (currentPos.Y + element.DesiredSize.Height >= currentPos_e.Y) &&
                    (currentPos.Y <= (currentPos_e.Y + e.DesiredSize.Height))
                    );
            });

            return(uIElement == null ? false : true);
        }
Esempio n. 2
0
        private static Point GetCenterComponentOnCanvas(UIElement element)
        {
            var CurrentPositionComponentOnCanvas = CustomVisualTreeHelper.PositionElementOnKernelCanvas(element);

            return(new Point(
                       (element as IEComponent).CenterComponent.X + CurrentPositionComponentOnCanvas.X,
                       (element as IEComponent).CenterComponent.Y + CurrentPositionComponentOnCanvas.Y
                       ));
        }
Esempio n. 3
0
        public static void UserControl_ManipulationCompleted(this IEComponent component, object sender, ManipulationCompletedRoutedEventArgs e)
        {
            var currentPositionComponentOnCanvas = CustomVisualTreeHelper.PositionElementOnKernelCanvas(sender as UIElement);
            var left = Math.Round(currentPositionComponentOnCanvas.X); // Убрать Round?
            var top  = Math.Round(currentPositionComponentOnCanvas.Y);

            // Выравнивание элемента по центру
            var centerComponentOnCanvas = GetCenterComponentOnCanvas(sender as UIElement);

            var step   = 20;
            var deltaX = Math.Round(centerComponentOnCanvas.X) % step;

            if (deltaX < step / 2)
            {
                left -= deltaX;
            }
            else
            {
                left += (step - deltaX);
            }

            var deltaY = Math.Round(centerComponentOnCanvas.Y) % step;

            if (deltaY < step / 2)
            {
                top -= deltaY;
            }
            else
            {
                top += (step - deltaY);
            }
            // *
            // Проверка на выход из границ Canvas
            left = left < 0 ? 0 : left;
            top  = top < 0 ? 0 : top;
            // *

            Canvas.SetLeft((UIElement)sender, left);
            Canvas.SetTop((UIElement)sender, top);

            if (IsIntersectOnCanvas(sender as UIElement))
            {
                Canvas.SetLeft((UIElement)sender, (sender as IEComponent).OldPositionComponentOnCanvas.X);
                Canvas.SetTop((UIElement)sender, (sender as IEComponent).OldPositionComponentOnCanvas.Y);
            }

            (sender as IEComponent).ChildrenPositionUpdate();
        }
Esempio n. 4
0
 public static void UserControl_ManipulationStarted(this IEComponent component, object sender, ManipulationStartedRoutedEventArgs e)
 {
     (sender as IEComponent).OldPositionComponentOnCanvas = CustomVisualTreeHelper.PositionElementOnKernelCanvas(sender as UIElement);
 }