protected override Size ArrangeOverride(Size finalSize) { AdornerLayer.Arrange(new Rect(finalSize)); if (TemplateChild != null) { if (delegateScrollInfo == innerScrollInfo) { Size finalScrollSize = new Size(CanHorizontallyScroll ? Double.PositiveInfinity : finalSize.Width, CanVerticallyScroll ? Double.PositiveInfinity : finalSize.Height); Size childFinalSize = TemplateChild.DesiredSize.Bounds(finalSize, finalScrollSize); Point childOffset = Offset.Bounds(Point.Zero, (childFinalSize - ViewportSize).Max(Size.Zero).ToPoint()); TemplateChild.Arrange(new Rect(-childOffset, childFinalSize)); } else { // CanContentScroll and Content implements IScrollInfo TemplateChild.Arrange(new Rect(finalSize)); } } innerScrollInfo.ExtentSize = TemplateChild != null ? TemplateChild.VisualSize : Size.Zero; innerScrollInfo.ViewportSize = finalSize; return(finalSize); }
protected override Size ArrangeOverride(Size finalSize) { if (TemplateChild != null) { TemplateChild.Arrange(new Rect(finalSize)); } return(finalSize); }
protected override Size MeasureOverride(Size availableSize) { if (TemplateChild == null) { return(Size.Zero); } TemplateChild.Measure(availableSize); return(TemplateChild.DesiredSize); }
protected override Size MeasureOverride(Size availableSize) { if (TemplateChild == null) { return(Size.Zero); } ComputedHorizontalScrollBarVisibility = GetScrollBarVisibility(HorizontalScrollBarVisibility, false); ComputedVerticalScrollBarVisibility = GetScrollBarVisibility(VerticalScrollBarVisibility, false); ComputedScrollBarsVisibility = ComputedHorizontalScrollBarVisibility == Visibility.Visible && ComputedVerticalScrollBarVisibility == Visibility.Visible ? Visibility.Visible : Visibility.Collapsed; // 3 passes, each pass can cause an overflow (and add a scrollbar which invalidates the measure), starting with no overlaps for (int measurePass = 0; measurePass < 3; measurePass++) { // computed visibilities can invalidate the ScrollBars measure, invalidate their path so they will be re-measured through TemplateChild InvalidateElementMeasurePath(this, HorizontalScrollBar); InvalidateElementMeasurePath(this, VerticalScrollBar); TemplateChild.Measure(availableSize); Visibility measuredHorizontalScrollBarVisibility = GetScrollBarVisibility(HorizontalScrollBarVisibility, scrollContentPresenter != null && scrollContentPresenter.ViewportSize.Width < scrollContentPresenter.ExtentSize.Width); Visibility measuredVerticalScrollBarVisibility = GetScrollBarVisibility(VerticalScrollBarVisibility, scrollContentPresenter != null && scrollContentPresenter.ViewportSize.Height < scrollContentPresenter.ExtentSize.Height); if (ComputedHorizontalScrollBarVisibility == measuredHorizontalScrollBarVisibility && ComputedVerticalScrollBarVisibility == measuredVerticalScrollBarVisibility) { break; } ComputedHorizontalScrollBarVisibility = measuredHorizontalScrollBarVisibility; ComputedVerticalScrollBarVisibility = measuredVerticalScrollBarVisibility; ComputedScrollBarsVisibility = ComputedHorizontalScrollBarVisibility == Visibility.Visible && ComputedVerticalScrollBarVisibility == Visibility.Visible ? Visibility.Visible : Visibility.Collapsed; } SetScrollInfoSizes(); return(TemplateChild.DesiredSize); }