public void Dispose() { Model = null; _splitter.DragStarted -= OnDragStarted; _splitter.DragDelta -= OnDragDelta; _splitter.DragCompleted -= OnDragCompleted; _splitter = null; _layoutContent.Dispose(); }
private void _InitChildren() { _layoutContent = new LayoutContentControl() { HorizontalAlignment = HorizontalAlignment.Stretch, VerticalAlignment = VerticalAlignment.Stretch, BorderThickness = new Thickness(1), BorderBrush = new SolidColorBrush(new Color() { A = 0xFF, R = 0xCC, G = 0xCE, B = 0xDB }) }; _splitter = new LayoutDragSplitter(); _splitter.DragStarted += OnDragStarted; _splitter.DragDelta += OnDragDelta; _splitter.DragCompleted += OnDragCompleted; _splitter.Background = ResourceManager.SplitterBrushVertical; }
/// <summary> /// 计算拖动时的上下边界值 /// </summary> /// <param name="splitter">拖动的对象</param> /// <param name="x1">下界</param> /// <param name="x2">上界</param> private void _ComputeDragBounds(LayoutDragSplitter splitter, ref double x1, ref double x2) { var pToScreen = RootPanel.PointToScreenDPIWithoutFlowDirection(new Point()); switch (Side) { case DockSide.Left: case DockSide.Right: _dragBound1 = pToScreen.X; _dragBound2 = pToScreen.X + RootPanel.ActualWidth - Constants.SplitterSpan / 2; break; case DockSide.Top: case DockSide.Bottom: _dragBound1 = pToScreen.Y; _dragBound2 = pToScreen.Y + RootPanel.ActualHeight - Constants.SplitterSpan / 2; break; } }
private void _CreateDragPopup(LayoutDragSplitter splitter) { pToScreen = this.PointToScreenDPIWithoutFlowDirection(new Point()); var transfrom = splitter.TransformToAncestor(this); var _pToInterPanel = transfrom.Transform(new Point(0, 0)); pToScreen.X += _pToInterPanel.X; pToScreen.Y += _pToInterPanel.Y; switch (Side) { case DockSide.Left: case DockSide.Right: Model.DesiredWidth = ActualWidth - Constants.SplitterSpan / 2; break; case DockSide.Top: case DockSide.Bottom: Model.DesiredHeight = ActualHeight - Constants.SplitterSpan / 2; break; } _dragPopup = new Popup() { Child = new Rectangle() { Height = splitter.ActualHeight, Width = splitter.ActualWidth, Fill = Brushes.Black, Opacity = Constants.DragOpacity, IsHitTestVisible = false, }, Placement = PlacementMode.Absolute, HorizontalOffset = pToScreen.X, VerticalOffset = pToScreen.Y, AllowsTransparency = true }; DockHelper.ComputeSpliterLocation(_dragPopup, pToScreen, new Size(splitter.ActualWidth, splitter.ActualHeight)); _dragPopup.IsOpen = true; }