【问题标题】:Issue with ScrollViewer in WPFWPF 中的 ScrollViewer 问题
【发布时间】:2011-11-15 11:38:16
【问题描述】:

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

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

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

谢谢

【问题讨论】:

    标签: c# wpf scrollview


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 谢谢,WPF 中是否有类似 Windows 窗体的 ANCHOR 属性的东西?
    • @MSingh,您将它放在 ScrollViewer 中。 ScrollViewer 是一个容器,可以根据需要保持其所有内容的高度。锚定无济于事——实际上,您的 ListBox 已经 锚定,它只是锚定在“哦,我将成为您需要的任何大小”的东西上。这些是将滚动区域放在另一个滚动区域中的危险——可用性差,并且很难定义行为。
    • 每次我必须处理 ScrollViewer 时,我都知道这将是糟糕的一天。 :)
    【解决方案2】:

    您可以将ScrollViewer 包装到Grid 中,并将scrollviewer 的Width 和Height 属性绑定到grid 的ActualWidth 和ActualHeight。所以滚动查看器的固定大小等于网格的大小,当窗口调整大小时会改变。

    例子:

    <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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-02-06
      • 1970-01-01
      • 2016-10-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多