我正在使用WPF应用程序并使用scrollViewer查看屏幕区域以外的内容。工作正常,没有问题。
但是如果我的窗口包含一个Listbox或Grid或类似的东西,并且该控件有许多记录,那么它不会向自身添加滚动条,而只是增加控件和窗口本身的高度,因为scrollviewer认为它需要扩展。
我不想硬编码列表框的高度,因为它在不同的分辨率下使它相同,我想让它增加它的高度但不总是像滚动查看器那样。
由于
答案 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>