为 WPF 树视图启用滚动
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/1310966/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
Enable scroll for WPF Treeview
提问by Ronald
Can anybody help me out with how to enable a treeview to scroll? There must be a simple way but I can't make it work in my code. After multiple failed tries, I currently have something like this:
任何人都可以帮助我如何启用树视图滚动?必须有一个简单的方法,但我不能让它在我的代码中工作。经过多次失败的尝试,我目前有这样的事情:
<ScrollViewer CanContentScroll="True">
<TreeView ...>
</TreeView>
</ScrollViewer>
I do see an 'disabled' scrollbar, but when the notes of the treeview are larger than the screen height, no scrolling is activated.
我确实看到了一个“禁用”的滚动条,但是当树视图的注释大于屏幕高度时,不会激活滚动。
回答by Kent Boogaart
The TreeView
control itself includes a ScrollViewer
in its template. You should be able to just use a TreeView
inside an appropriate host (not a StackPanel
!).
该TreeView
控件本身包含ScrollViewer
在它的模板。您应该能够TreeView
在适当的主机内部使用一个(而不是一个StackPanel
!)。
回答by drjeks
The TreeView contains a ScrollViewer, but as @Carlo said, the TreeView or its container needs to have a height. Alternatively, the TreeView should be hosted in a container that doesn't give infinite height to its children (i.e. a StackPanel which I think was what @Kent was meaning). So place it inside a Grid, no need to give the Grid or the TreeView an explicit height and you should get the scrollbars.
TreeView 包含一个 ScrollViewer,但正如@Carlo 所说,TreeView 或其容器需要有一个高度。或者,TreeView 应该托管在一个不会为其子项提供无限高度的容器中(即 StackPanel,我认为这是@Kent 的意思)。所以把它放在一个 Grid 中,不需要给 Grid 或 TreeView 一个明确的高度,你应该得到滚动条。
回答by Carlo
Do you have a height explicitly set on your window? If you want to see the scrollbar something must define the height of the TreeView or its container, otherwise it won't know when it needs to show the scrollbar.
您是否在窗口上明确设置了高度?如果你想看到滚动条,必须定义 TreeView 或其容器的高度,否则它不知道什么时候需要显示滚动条。
Example:
例子:
<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>
回答by Rubarb
It's a simply a matter of giving the TreeView a fixed Height and Width. And maybe put it in a border. Also, i do have a MaxWidth on my items' content. For example the following is in my main window under two stack panels and it works (I'm using MahApps Metro controls):
这只是给 TreeView 一个固定的高度和宽度的问题。也许把它放在一个边界上。此外,我的项目内容确实有一个 MaxWidth。例如,以下内容位于我的主窗口中的两个堆栈面板下,并且可以正常工作(我使用的是 MahApps Metro 控件):
<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>
回答by Dipesh Bagdi
Instead of Tree View you can use Expander. Which can scoll With Scroll view properly this work same as Treeview.
您可以使用扩展器代替树视图。可以正确使用滚动视图,这与 Treeview 的工作方式相同。
回答by I will get there some day
How about just setting the height and width to a fixed amount? I know this might not be the answer for everyone.
将高度和宽度设置为固定数量怎么样?我知道这可能不是每个人的答案。