Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 2
0
        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();
        }
Ejemplo n.º 3
0
        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);
        }
Ejemplo n.º 4
0
 protected override Size MeasureOverride(Size availableSize)
 {
     this.UpdateIndices();
     return(SplitterPanel.Measure(availableSize, this.Orientation, (IEnumerable <SplitterMeasureData>)SplitterMeasureData.FromElements((IList)this.InternalChildren), true));
 }