无法让 WPF ScrollViewer 工作

Posted

技术标签:

【中文标题】无法让 WPF ScrollViewer 工作【英文标题】:Can't get WPF ScrollViewer to work 【发布时间】:2011-08-23 00:32:02 【问题描述】:

我有一个 StackPanel,由于某种原因,我无法让最底部的 ScrollViewer 的内容可滚动,尽管 Frame 的内部高度明显超出了 ScrollViewer 的范围。我之前有一个 Grid 作为 Window 的根容器,但是当我将其更改为 StackPanel 时,滚动条不再出现。

似乎唯一可行的是,如果我明确设置了 ScrollViewer 的高度,但在调整大小时它不会随 thw Window 调整大小。

我必须使用网格吗?

对不起,如果这很明显;我对 WPF 比较陌生。

提前感谢您的帮助!

<Window x:Class="MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" mc:Ignorable="d" xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
         d:DesignWidth="566" Width="719" >

    <StackPanel VerticalAlignment="Stretch"  >
        <Menu HorizontalAlignment="Stretch" Name="Menu1" VerticalAlignment="Stretch" Width="Auto">
            <MenuItem Header="_File" Name="MenuItem1">
                <MenuItem Header="_Print" Name="MenuItem2" />
            </MenuItem>
        </Menu>

        <Canvas x:Name="SearchCanvas"  Width="681" Height="55">
            <ComboBox Canvas.Left="6" Canvas.Top="0" Height="22" x:Name="cbLookupField" Width="302" Text="" SelectedIndex="0">
                <ComboBoxItem Content="Reference Name" />
                <ComboBoxItem Content="Matter" />
                <ComboBoxItem Content="Client Loan Number" />
            </ComboBox>
            <TextBox KeyDown="tbLookup_KeyDown" Canvas.Left="6" Canvas.Top="28" Height="23" x:Name="tbLookup" Width="302" />

            <Button Canvas.Left="314" Canvas.Top="27" Content="Search" Height="24" Name="btnSearch" Width="106" />

            <ListView MouseDoubleClick="lvSearchResults_MouseDoubleClick" 
                      ItemsSource="Binding Tables[0]"  
                      Canvas.Left="-8" Canvas.Top="57" Height="129" Name="lvSearchResults" Width="697" Visibility="Hidden">
                <ListView.View>
                    <GridView x:Name="gvResultsGridView"/>
                </ListView.View>
            </ListView>
        </Canvas>

        <ScrollViewer  x:Name="ScrollViewer1" VerticalScrollBarVisibility="Visible">
            <Frame Height="Auto" Source="Full Report.xaml" VerticalAlignment="Stretch" x:Name="Frame1" />
        </ScrollViewer>
    </StackPanel>
</Window>

【问题讨论】:

【参考方案1】:

底部的 ScrollViewer 没有固定高度,因此因为它包含在 StackPanel 中,所以它的高度将是内容的高度,在本例中为 Frame 高度。

您可以为 ScrollViewer 设置固定高度,或者使用 Grid 代替 StackPanel。如果你使用网格,你应该为 ScrollViewer 所在的行设置一个固定的高度。

希望对你有帮助!

【讨论】:

谢谢@Alfonso。这就说得通了;我认为用 StackPanel 替换 Grid 是合乎逻辑的,因为元素是垂直排列的(堆叠在一起),但显然不是。 @transistor1 - 不客气!这就是堆栈面板的问题。它们更容易设置,但网格允许对布局进行更多控制。

以上是关于无法让 WPF ScrollViewer 工作的主要内容,如果未能解决你的问题,请参考以下文章

XAML/WPF - 里面有 StackPanel 的 ScrollViewer 不滚动

如何使 WPF ScrollViewer 中键单击滚动?

WPF ScrollViewer 滚动条问题

WPF中ScrollViewer 的问题。

WPF ContentControl 宽度会增加,但在包裹在 ScrollViewer 中时不会缩小

WPF:关于ScrollViewer中嵌套Datagrid的问题