private void TrackResizePreview(SplitterGrip grip, double horizontalChange, double verticalChange) { int gripIndex; int resizeIndex1; int resizeIndex2; if (!this.GetResizeIndices(grip, out gripIndex, out resizeIndex1, out resizeIndex2)) { return; } double pixelAmount = this.Orientation == Orientation.Horizontal ? horizontalChange : verticalChange; IList <SplitterMeasureData> splitterMeasureDataList = SplitterMeasureData.FromElements((IList)this.InternalChildren); this.ResizeChildrenCore(splitterMeasureDataList[resizeIndex1], splitterMeasureDataList[resizeIndex2], pixelAmount); SplitterPanel.Measure(this.RenderSize, this.Orientation, (IEnumerable <SplitterMeasureData>)splitterMeasureDataList, false); Point point = grip.TransformToAncestor((Visual)this).Transform(new Point(0.0, 0.0)); if (this.Orientation == Orientation.Horizontal) { point.X += splitterMeasureDataList[gripIndex].MeasuredBounds.Width - this.InternalChildren[gripIndex].RenderSize.Width; } else { point.Y += splitterMeasureDataList[gripIndex].MeasuredBounds.Height - this.InternalChildren[gripIndex].RenderSize.Height; } Point screen = this.PointToScreen(point); this.currentPreviewWindow.Move((double)(int)screen.X, (double)(int)screen.Y); }
internal void ResizeChildren(int index1, int index2, double pixelAmount) { SplitterMeasureData child1 = new SplitterMeasureData(this.InternalChildren[index1]); SplitterMeasureData child2 = new SplitterMeasureData(this.InternalChildren[index2]); if (!this.ResizeChildrenCore(child1, child2, pixelAmount)) { return; } SplitterPanel.SetSplitterLength(child1.Element, child1.AttachedLength); SplitterPanel.SetSplitterLength(child2.Element, child2.AttachedLength); this.InvalidateMeasure(); }
private bool ResizeChildrenCore(SplitterMeasureData child1, SplitterMeasureData child2, double pixelAmount) { UIElement element1 = child1.Element; UIElement element2 = child2.Element; SplitterLength attachedLength1 = child1.AttachedLength; SplitterLength attachedLength2 = child2.AttachedLength; double actualSplitterLength1 = SplitterPanel.GetActualSplitterLength(element1); double actualSplitterLength2 = SplitterPanel.GetActualSplitterLength(element2); double num1 = Math.Max(0.0, Math.Min(actualSplitterLength1 + actualSplitterLength2, actualSplitterLength1 + pixelAmount)); double num2 = Math.Max(0.0, Math.Min(actualSplitterLength1 + actualSplitterLength2, actualSplitterLength2 - pixelAmount)); double minimumLength1 = SplitterPanel.GetMinimumLength(element1); double minimumLength2 = SplitterPanel.GetMinimumLength(element2); if (minimumLength1 + minimumLength2 > num1 + num2) { return(false); } if (num1 < minimumLength1) { num2 -= minimumLength1 - num1; num1 = minimumLength1; } if (num2 < minimumLength2) { num1 -= minimumLength2 - num2; num2 = minimumLength2; } if (attachedLength1.IsFill && attachedLength2.IsFill || attachedLength1.IsStretch && attachedLength2.IsStretch) { SplitterMeasureData splitterMeasureData = child1; double num3 = num1; SplitterLength splitterLength = new SplitterLength(num3 / (num3 + num2) * (attachedLength1.Value + attachedLength2.Value), attachedLength1.SplitterUnitType); splitterMeasureData.AttachedLength = splitterLength; child2.AttachedLength = new SplitterLength(num2 / (num1 + num2) * (attachedLength1.Value + attachedLength2.Value), attachedLength1.SplitterUnitType); } else if (attachedLength1.IsFill) { child2.AttachedLength = new SplitterLength(num2, SplitterUnitType.Stretch); } else { child1.AttachedLength = new SplitterLength(num1, SplitterUnitType.Stretch); } return(true); }
protected override Size MeasureOverride(Size availableSize) { this.UpdateIndices(); return(SplitterPanel.Measure(availableSize, this.Orientation, (IEnumerable <SplitterMeasureData>)SplitterMeasureData.FromElements((IList)this.InternalChildren), true)); }