A ScrollViewer
может прокручивать любой произвольный контент, поэтому вам не нужно реализовывать IScrollInfo, если вы не хотите поддерживать логическую прокрутку, то есть по строкам, а не по пикселям.
Если ваш пользовательский элемент управления не реализует MeasureOverride
, он не будет участвовать в фазе измерения макета, и ScrollViewer
не будет знать, что вы хотите, чтобы область прокрутки была.
Вот полный пример прокручиваемого Grid
с фоном для миллиметровки только для XAML:
<DockPanel>
<ScrollViewer Height="200" Width="250" HorizontalScrollBarVisibility="Visible">
<Grid Height="400" Width="400">
<Grid.Background>
<DrawingBrush x:Name="GridBrush"
Viewport="0,0,10,10" ViewportUnits="Absolute" TileMode="Tile">
<DrawingBrush.Drawing>
<DrawingGroup>
<GeometryDrawing Brush="#CCCCFF">
<GeometryDrawing.Geometry>
<RectangleGeometry Rect="0,0 10,1" />
</GeometryDrawing.Geometry>
</GeometryDrawing>
<GeometryDrawing Brush="#CCCCFF">
<GeometryDrawing.Geometry>
<RectangleGeometry Rect="0,0 1,10" />
</GeometryDrawing.Geometry>
</GeometryDrawing>
</DrawingGroup>
</DrawingBrush.Drawing>
</DrawingBrush>
</Grid.Background>
</Grid>
</ScrollViewer>
</DockPanel>