ScrollBar已禁用

时间:2012-06-28 10:04:27

标签: c# wpf xaml scrollbar

我试图像这样实现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中包含的ButtonScrollviewer大于窗口,那么应该启用ScrollBar,不是吗?

更新

我发现问题在于ScrollViewer中的StackPanel。可以尝试使用Grid代替...更新来。

关于Stackpanel是问题的我是对的,并且跟随Heinzi建议使用DockPanel并且所有的工作都很好。 :)谢谢!

3 个答案:

答案 0 :(得分:2)

问题在于你StackPanel。它总是需要它所需的所有垂直空间,因此ScrollPanel的容器比窗口本身大得多,并且ScrollViewer看不到需要滚动。

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

<Grid> 
    <DockPanel> 
        <Label DockPanel.Dock="Bottom" ... Name="lblScrollDown">\/</Label> 
        <ScrollViewer Name="scrlBr"> 
             ...
        </ScrollViewer> 
    </DockPanel> 
</Grid> 

答案 1 :(得分:0)

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

答案 2 :(得分:0)

也许你需要写这样的东西

<ScrollViewer Name="scrlBr" VerticalScrollBarVisibility="auto" HorizontalScrollBarVisibility="auto">
...
</ScrollViewer>