コード例 #1
0
        private static void self_MouseDown(object sender, MouseButtonEventArgs e)
        {
            FrameworkElement self = (FrameworkElement)sender;

            ResizeWay resizable = (ResizeWay)self.GetValue(ResizableWayProperty);

            if (resizable == ResizeWay.None)
            {
                return;
            }

            bool captured = self.CaptureMouse();

            if (captured)
            {
                Point lastPosition = self.PointToScreen(e.GetPosition(self));
                self.SetValue(CapturedProperty, true);
                self.SetValue(LastPositionProperty, lastPosition);
                e.Handled = true;
            }
        }
コード例 #2
0
 public static void SetResizeWay(DependencyObject d, ResizeWay value)
 {
     d.SetValue(ResizeWayProperty, value);
 }
コード例 #3
0
        private static void self_MouseMove(object sender, MouseEventArgs e)
        {
            try
            {
                FrameworkElement self      = (FrameworkElement)sender;
                double           minHeight = (double)self.GetValue(MinHeightProperty);
                double           minWidth  = (double)self.GetValue(MinWidthProperty);
                //Debug.WriteLine(string.Format("self_MouseMove minHeight:{0}; minWidth:{1}", minHeight, minWidth));

                bool captured = (bool)self.GetValue(CapturedProperty);
                if (captured)
                {
                    var       position     = self.PointToScreen(e.GetPosition(self));
                    ResizeWay resizableWay = (ResizeWay)self.GetValue(ResizableWayProperty);
                    Point     lastPosition = (Point)self.GetValue(LastPositionProperty);
                    var       offsetX      = position.X - lastPosition.X;
                    if ((resizableWay & ResizeWay.Left) == ResizeWay.Left)
                    {
                        offsetX     = Math.Min(offsetX, self.ActualWidth - minWidth);
                        self.Width -= offsetX;
                        Window window = self as Window;
                        if (window != null)
                        {
                            window.Left += offsetX;
                        }
                    }
                    else if ((resizableWay & ResizeWay.Right) == ResizeWay.Right)
                    {
                        offsetX     = Math.Max(offsetX, minWidth - self.ActualWidth);
                        self.Width += offsetX;
                    }
                    var offsetY = position.Y - lastPosition.Y;
                    if ((resizableWay & ResizeWay.Top) == ResizeWay.Top)
                    {
                        offsetY      = Math.Min(offsetY, self.ActualHeight - minHeight);
                        self.Height -= offsetY;
                        Window window = self as Window;
                        if (window != null)
                        {
                            window.Top += offsetY;
                        }
                    }
                    else if ((resizableWay & ResizeWay.Bottom) == ResizeWay.Bottom)
                    {
                        offsetY      = Math.Max(offsetY, minHeight - self.ActualHeight);
                        self.Height += offsetY;
                    }

                    lastPosition = position;
                    self.SetValue(LastPositionProperty, lastPosition);
                    e.Handled = true;
                }
                else
                {
                    ResizeWay resizeWay    = GetResizeWay(self);
                    ResizeWay resizableWay = ResizeWay.None;
                    var       position     = e.GetPosition(self);
                    if (position.Y < THRESHOLD)
                    {
                        resizableWay |= ResizeWay.Top;
                    }
                    else if (position.Y > self.ActualHeight - THRESHOLD && position.Y < self.ActualHeight - 1)
                    {
                        resizableWay |= ResizeWay.Bottom;
                    }

                    if (position.X < THRESHOLD)
                    {
                        resizableWay |= ResizeWay.Left;
                    }
                    else if (position.X > self.ActualWidth - THRESHOLD && position.X < self.ActualWidth - 1)
                    {
                        resizableWay |= ResizeWay.Right;
                    }
                    resizableWay &= resizeWay;
                    self.SetValue(ResizableWayProperty, resizableWay);

                    if (resizableWay != ResizeWay.None)
                    {
                        if ((resizableWay & ResizeWay.Left) == ResizeWay.Left)
                        {
                            if ((resizableWay & ResizeWay.Top) == ResizeWay.Top)
                            {
                                self.Cursor = Cursors.SizeNWSE;
                            }
                            else if ((resizableWay & ResizeWay.Bottom) == ResizeWay.Bottom)
                            {
                                self.Cursor = Cursors.SizeNESW;
                            }
                            else
                            {
                                self.Cursor = Cursors.SizeWE;
                            }
                        }
                        else if ((resizableWay & ResizeWay.Right) == ResizeWay.Right)
                        {
                            if ((resizableWay & ResizeWay.Top) == ResizeWay.Top)
                            {
                                self.Cursor = Cursors.SizeNESW;
                            }
                            else if ((resizableWay & ResizeWay.Bottom) == ResizeWay.Bottom)
                            {
                                self.Cursor = Cursors.SizeNWSE;
                            }
                            else
                            {
                                self.Cursor = Cursors.SizeWE;
                            }
                        }
                        else if ((resizableWay & ResizeWay.Top) == ResizeWay.Top)
                        {
                            self.Cursor = Cursors.SizeNS;
                        }
                        else if ((resizableWay & ResizeWay.Bottom) == ResizeWay.Bottom)
                        {
                            self.Cursor = Cursors.SizeNS;
                        }
                        e.Handled = true;
                    }
                    else
                    {
                        self.Cursor = Cursors.Arrow;
                    }
                }
            }
            catch (Exception ex)
            {
                Debug.WriteLine("self_MouseMove exception:" + ex.Message);
            }
        }