void ChangeSize(double delta) { // delta = difference in pixels if (delta < -originalPixelSize1) { delta = -originalPixelSize1; } if (delta > originalPixelSize2) { delta = originalPixelSize2; } // replace Auto lengths with absolute lengths if necessary if (original1.IsAuto) { original1 = new GridLength(originalPixelSize1); } if (original2.IsAuto) { original2 = new GridLength(originalPixelSize2); } GridLength new1; if (original1.IsStar && originalPixelSize1 > 0) { new1 = new GridLength(original1.Value * (originalPixelSize1 + delta) / originalPixelSize1, GridUnitType.Star); } else { new1 = new GridLength(originalPixelSize1 + delta); } GridLength new2; if (original2.IsStar && originalPixelSize2 > 0) { new2 = new GridLength(original2.Value * (originalPixelSize2 - delta) / originalPixelSize2, GridUnitType.Star); } else { new2 = new GridLength(originalPixelSize2 - delta); } firstRow.Properties[RowColumnSizeProperty].SetValue(new1); secondRow.Properties[RowColumnSizeProperty].SetValue(new2); UIElement e = ((UIElement)VisualTreeHelper.GetParent(this)); e.InvalidateArrange(); rail.InvalidateVisual(); }