0

我试图像这样实现一个 ScrollViewer;

<Height="auto" Width="auto"
            MaxHeight="500" MaxWidth="400"
            ResizeMode="NoResize" WindowStyle="None">
        <Grid>
            <StackPanel>
                <ScrollViewer Name="scrlBr">
                    <StackPanel Orientation="Vertical">
                        <TextBlock Name ="txtBlock" Margin="10" Height="auto" 
Width="auto" TextWrapping="Wrap"></TextBlock>
                        <Button Name="btnOk" Click="btnOk_Click" Width="80"
HorizontalAlignment="Center">Close!</Button>
                    </StackPanel>
                </ScrollViewer>
                <Label HorizontalAlignment="Center" FontSize="3" 
Name="lblScrollDown">\/</Label>
            </StackPanel>
        </Grid>
    </Window>

我遇到的问题是滚动条显示为已禁用,而文本显然从窗口消失了,我看不到btnOk. 当然,如果窗口具有固定的高度,TextBlock并且Button包含在 中的 andScrollviewer比窗口大,那么应该启用 ScrollBar,不是吗?

更新

我发现问题在于ScrollViewerStackPanel. 可能会尝试使用Grid...更新来。

解决方案

我对Stackpanel这个问题的看法是正确的,并同意 Heinzi 的建议,即使用DockPanel一切都很好。:) 谢谢!

4

3 回答 3

3

问题是你的StackPanel. 它总是占据它需要的所有垂直空间,所以 ScrollPanel 的容器比窗口​​本身大得多,而且 ScrollViewer 认为不需要滚动。

解决方案:将 替换StackPanelDockPanel. 将<Label>声明移动到顶部并将其停靠在 DockPanel 的底部。DockPanel 中的最后一个子节点(ScrollViewer在本例中为)总是填充剩余空间:

<Grid> 
    <DockPanel> 
        <Label DockPanel.Dock="Bottom" ... Name="lblScrollDown">\/</Label> 
        <ScrollViewer Name="scrlBr"> 
             ...
        </ScrollViewer> 
    </DockPanel> 
</Grid> 
于 2012-06-28T10:08:03.163 回答
0

也许你需要写这样的东西

<ScrollViewer Name="scrlBr" VerticalScrollBarVisibility="auto" HorizontalScrollBarVisibility="auto">
...
</ScrollViewer>
于 2012-07-02T11:35:22.780 回答
0

尝试从 ScrollViewer 设置CanContentScroll属性True并设置 StackPanel 的固定高度,因为 StackPanel 设计为在一个方向上无限增长。或者更好的是,使用不同的面板来堆叠您的物品。

于 2012-06-28T10:17:26.563 回答