WPF - 自定义控件ScrollViewer

时间:2011-01-16 18:36:58

标签: wpf custom-controls scrollviewer

我创建了一个自定义控件,只需在屏幕上绘制一个正方形网格。为此,它会覆盖OnRender方法并绘制矩形。

我已将此自定义控件添加到WPF窗口。但是,当我调整窗口大小时,隐藏了部分自定义控件。我想要发生的是滚动条出现,但是在添加滚动查看器后它没有做任何事情。

我已经在其他地方读过我应该实现的IScrollInfo,但这似乎要付出很多努力来做一些非常简单的事情。

如果有人能帮助我,我将不胜感激。

非常感谢,

马特

2 个答案:

答案 0 :(得分:2)

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>

答案 1 :(得分:0)

ScrollViewer将使用其子DesiredSize作为是否需要滚动的决定因素。您的自定义控件是否覆盖Measure()?发布自定义控件的代码可能需要进一步帮助。