为WPF Treeview启用滚动

为WPF Treeview启用滚动,wpf,treeview,scroll,Wpf,Treeview,Scroll,有人能帮我解决如何使树视图滚动的问题吗?必须有一个简单的方法,但我不能让它在我的代码中工作。在多次失败的尝试之后,我目前有如下情况: <ScrollViewer CanContentScroll="True"> <TreeView ...> </TreeView> </ScrollViewer> 我确实看到一个“禁用”的滚动条,但当treeview的注释大于屏幕高度时

有人能帮我解决如何使树视图滚动的问题吗?必须有一个简单的方法,但我不能让它在我的代码中工作。在多次失败的尝试之后,我目前有如下情况:

        <ScrollViewer CanContentScroll="True">
           <TreeView ...>
           </TreeView>
        </ScrollViewer>


我确实看到一个“禁用”的滚动条,但当treeview的注释大于屏幕高度时,不会激活滚动

树状视图控件本身在其模板中包含一个
ScrollViewer
。您应该能够在适当的主机内使用
TreeView
(而不是
StackPanel
!)。

您的窗口是否明确设置了高度?如果您想查看滚动条,则必须定义TreeView或其容器的高度,否则它将不知道何时需要显示滚动条

例如:

<Window x:Class="StackOverflowTests.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" x:Name="window1" Height="300" Width="300">
    <Grid>
        <TreeView  Name="treeView1" Height="150" VerticalAlignment="Top">
            <TreeViewItem Header="Root" IsExpanded="True">
                <TreeViewItem Header="Item 1"></TreeViewItem>
                <TreeViewItem Header="Item 2"></TreeViewItem>
                <TreeViewItem Header="Item 3"></TreeViewItem>
                <TreeViewItem Header="Item 4"></TreeViewItem>
                <TreeViewItem Header="Item 5"></TreeViewItem>
                <TreeViewItem Header="Item 6"></TreeViewItem>
                <TreeViewItem Header="Item 7"></TreeViewItem>
                <TreeViewItem Header="Item 8"></TreeViewItem>
                <TreeViewItem Header="Item 9"></TreeViewItem>
                <TreeViewItem Header="Item 10"></TreeViewItem>
                <TreeViewItem Header="Item 11"></TreeViewItem>
                <TreeViewItem Header="Item 12"></TreeViewItem>
                <TreeViewItem Header="Item 13"></TreeViewItem>
                <TreeViewItem Header="Item 14"></TreeViewItem>
                <TreeViewItem Header="Item 15"></TreeViewItem>
                <TreeViewItem Header="Item 16"></TreeViewItem>
                <TreeViewItem Header="Item 17"></TreeViewItem>
                <TreeViewItem Header="Item 18"></TreeViewItem>
                <TreeViewItem Header="Item 19"></TreeViewItem>
                <TreeViewItem Header="Item 20"></TreeViewItem>
                <TreeViewItem Header="Item 21"></TreeViewItem>
                <TreeViewItem Header="Item 22"></TreeViewItem>
                <TreeViewItem Header="Item 23"></TreeViewItem>
                <TreeViewItem Header="Item 24"></TreeViewItem>
                <TreeViewItem Header="Item 24"></TreeViewItem>
            </TreeViewItem>
        </TreeView>
    </Grid>
</Window>


TreeView包含一个ScrollViewer,但正如@Carlo所说,TreeView或其容器需要有一个高度。或者,TreeView应该托管在一个容器中,该容器不会为其子级提供无限高(即StackPanel,我认为这就是@Kent的意思)。所以把它放在一个网格内,不需要给网格或树视图一个明确的高度,你应该得到滚动条

您可以使用Expander代替树状视图。它可以与Scroll view正确地结合这项工作与Treeview相同。

只需给Treeview一个固定的高度和宽度即可。也许把它放在边界上。此外,我的项目内容上有一个MaxWidth。例如,以下内容在我的主窗口中的两个堆栈面板下运行(我使用的是MahApps Metro控件):


将高度和宽度设置为固定值怎么样?
我知道这可能不是每个人的答案。

什么才是合适的主持人?我的TreeView确实在StackPanel中。我想他是在说ScrollViewer不是合适的主机,至于“不是StackPanel!”部分,我真的不明白,如果在网格、StackPanel、WrapPanel、UniformGrid中使用它,TreeView的行为应该没有什么区别,等等。
StackPanel
为其内容提供其子级要求的任何宽度(当方向为水平时)或高度(当方向为垂直时)。因此,如果您将
树状视图
(或
列表框
,或任何东西)放入
堆栈面板
,则
树状视图
将认为它有足够的高度来显示所有项目,而不需要
滚动条
。事实上,
TreeView
将被切断,因为您的屏幕空间将用完。使用
网格
。我能够在自己的工作中解决这个问题,完全是因为Kent Boogaart的评论,+1。只需将树状视图包装在网格括号中即可。即使在ScrollViewer中封装TreeView,并设置ScrollViewer的宽度和高度,StackPanel仍会使滚动出错。我本以为孩子身上的宽度/高度约束会满足StackPanel的要求。但事实并非如此。避免像瘟疫一样在堆叠面板下观看树景。正如其他人所验证的,一个设置了宽度/高度的简单网格和它下面的树视图可以正确滚动。很抱歉,尝试向树视图及其容器添加高度,但没有成功。mm我确实获得了滚动条,我会将我的示例添加到我的答案中,看看它是否有效,基本上,窗口的高度设置为300,树视图的高度设置为150,因此树视图的高度是窗口的一半,如果其项目超出了高度,它会得到一个滚动条。据我所知,这根本不能回答问题。什么东西的高度和宽度应该固定?这将如何启用滚动条?请再次阅读问题。“我确实看到一个‘禁用’的滚动条,但当treeview的注释大于屏幕高度时,不会激活滚动。”在treeview上设置高度和宽度。这实际上是在我上面的帖子中提到的。如果我记得清楚的话,一旦树视图上的高度和宽度固定,当主窗口调整大小时,滚动条就会出现。
<StackPanel Orientation="Horizontal" HorizontalAlignment="Center">
        <Border BorderThickness="2" BorderBrush="DarkGoldenrod" Margin="4">
        <TreeView x:Name="TreeView" Width="400" Height="800" Focusable="True" VerticalAlignment="Top">
        </TreeView>            
    </Border>
</StackPanel>