WPF - пользовательский элемент управления ScrollViewer - PullRequest
1 голос
/ 16 января 2011

Я создал пользовательский элемент управления, который просто рисует сетку квадратов на экране. Для этого он переопределяет метод OnRender и рисует прямоугольники.

Я добавил этот пользовательский элемент управления в окно WPF. Однако при изменении размера окна часть пользовательского элемента управления скрыта. Я хочу, чтобы появилась полоса прокрутки, однако после добавления средства просмотра прокрутки она ничего не сделала.

Я читал в другом месте, я должен реализовать IScrollInfo, но это кажется большим усилием сделать что-то довольно простое.

Если бы кто-нибудь мог мне помочь, это было бы очень признательно.

Большое спасибо,

Мэтт

Ответы [ 2 ]

2 голосов
/ 17 января 2011

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>
0 голосов
/ 16 января 2011

ScrollViewer будет использовать дочерний элемент DesiredSize в качестве определителя необходимости прокрутки. Ваш пользовательский элемент управления переопределяет Measure()? Публикация кода для вашего пользовательского элемента управления, вероятно, потребуется для дальнейшей помощи.

...