在WPF中使用ScrollViewer的问题

时间:2011-11-15 11:38:17

标签: c# wpf scrollview

我正在使用WPF应用程序并使用scrollViewer查看屏幕区域以外的内容。工作正常,没有问题。

但是如果我的窗口包含一个Listbox或Grid或类似的东西,并且该控件有许多记录,那么它不会向自身添加滚动条,而只是增加控件和窗口本身的高度,因为scrollviewer认为它需要扩展。

我不想硬编码列表框的高度,因为它在不同的分辨率下使它相同,我想让它增加它的高度但不总是像滚动查看器那样。

由于

2 个答案:

答案 0 :(得分:5)

如果不设置查看器的高度/宽度,则不能在ScrollViewer内包含可变高度/宽度对象。

滚动查看器实际上具有无限高度,因此网格会扩展以填充“可用”空间 - 因此您将看到效果。正如@JoeWhite在他的评论中所说,ScrollViewer是一个容器,可以保持其所有内容所需的高度。锚定无助 - 实际上,你的ListBox已经锚定,它只是固定在“哦,我将成为你需要我的任何大小”的东西上。

您需要限制高度,将ListBox移到ScrollViewer之外或使用ScrollViewer以外的其他内容。

再次引用@Joe“这些是将滚动区域放在另一个滚动区域内的危险 - 它的可用性很差,并且很难定义行为。”

答案 1 :(得分:1)

您可以将ScrollViewer包装到Grid中,并将scrollviewer的Width和Height属性绑定到grid的ActualWidth和ActualHeight。因此,scrollviewer的固定大小将等于网格大小,该大小将在窗口调整大小时更改。

示例:

<Grid x:Name="LayoutRoot" Background="White">
    <Grid Background="#FFF1F1F1" Height="49" VerticalAlignment="Top">
        <Button Content="Обзор" Margin="0,13,175.25,0" VerticalAlignment="Top" FontSize="14.667" HorizontalAlignment="Right" Width="95.147">
        </Button>
        <Label Content="{Binding DocPath, Converter={StaticResource FileNameConverter}, FallbackValue=Выберите файл, TargetNullValue=Выберите файл}" HorizontalAlignment="Left" VerticalAlignment="Top" Width="342.603" Margin="10,10,0,0" Height="33"/>
        <Button Content="Загрузить данные" HorizontalAlignment="Right" Margin="0,13,10,0" VerticalAlignment="Top" Width="151.147" FontSize="14.667">
        </Button>
    </Grid>
    <Grid x:Name="scrollBorder" Margin="10,54,10,10">
        <ScrollViewer x:Name="LogScroller" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto" 
                        HorizontalAlignment="Left" VerticalAlignment="Top" 
                        Height="{Binding ActualHeight, ElementName=scrollBorder}" Width="{Binding ActualWidth, ElementName=scrollBorder}" >
            <ItemsControl ItemsSource="{Binding Log}" />
        </ScrollViewer>
    </Grid>
</Grid>