WPF滚动视图器问题

3

我正在尝试在我的程序中使用一个简单的ScrollViewer,但是我遇到了一个问题。

如果我将我的程序中的所有内容都包含在一个ScrollViewer中,那么它可以正常工作:

<Window x:Class="WpfTest.MainWindow"         
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow"
        Name="PrimaryWindow">
    <ScrollViewer>
        <StackPanel>
            <Menu Height="21" VerticalAlignment="Top">
                <MenuItem Header="File"/>
                <MenuItem Header="Edit"/>
            </Menu>
            <StackPanel>
                <TextBlock Text="1"/>
                <TextBlock Text="2"/>
                <TextBlock Text="3"/>
                <TextBlock Text="4"/>
                <TextBlock Text="5"/>
                <TextBlock Text="6"/>
                <TextBlock Text="7"/>
                <TextBlock Text="8"/>
                <TextBlock Text="9"/>
                <TextBlock Text="10"/>
            </StackPanel>
        </StackPanel>
    </ScrollViewer>
</Window> 

然而,由于菜单是ScrollViewer的一部分,当用户向下滚动时,菜单会从屏幕上滚动出去。因此,我只在菜单下面的控件周围放置了ScrollViewer:

<Window x:Class="WpfTest.MainWindow"         
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        Title="MainWindow"
        Name="PrimaryWindow">
    <StackPanel>
        <Menu Height="21" VerticalAlignment="Top">
            <MenuItem Header="File"/>
            <MenuItem Header="Edit"/>
        </Menu>
        <ScrollViewer>
            <StackPanel>
                <TextBlock Text="1"/>
                <TextBlock Text="2"/>
                <TextBlock Text="3"/>
                <TextBlock Text="4"/>
                <TextBlock Text="5"/>
                <TextBlock Text="6"/>
                <TextBlock Text="7"/>
                <TextBlock Text="8"/>
                <TextBlock Text="9"/>
                <TextBlock Text="10"/>
            </StackPanel>
        </ScrollViewer>
    </StackPanel>
</Window> 

但是这次,ScrollViewer不起作用了!即使我调整窗口大小小于标签所需的高度,滚动条也不会被激活。
我做错了什么?
3个回答

7
问题是由根StackPanel引起的,StackPanel没有限制ScrollViewer的垂直高度。
尝试使用DockPanel来定位菜单:
<Window x:Class="WpfApplication1.Window1"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="Window1" Height="300" Width="300">
<DockPanel>
    <Menu DockPanel.Dock="Top" Height="21" VerticalAlignment="Top">
        <MenuItem Header="File"/>
        <MenuItem Header="Edit"/>
    </Menu>
    <ScrollViewer>
        <StackPanel>
            <TextBlock Text="1"/>
            <TextBlock Text="2"/>
            <TextBlock Text="3"/>
            <TextBlock Text="4"/>
            <TextBlock Text="5"/>
            <TextBlock Text="6"/>
            <TextBlock Text="7"/>
            <TextBlock Text="8"/>
            <TextBlock Text="9"/>
            <TextBlock Text="10"/>
        </StackPanel>
    </ScrollViewer>
</DockPanel>


1

只有祖先元素的高度或宽度发生变化时,ScrollViewer才会显示其滚动条。因此,您的祖先元素是StackPanel,在调整窗口大小时不会改变大小。


1

永远不要在 StackPanel 中使用 ScrollViewer,因为 StackPanel 的大小取决于其内容的大小!因此,ScrollViewer 认为它始终有足够的空间!

ScrollViewer 必须放在所有元素之外。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接