有谁能帮我解决如何启用树形视图的滚动条问题吗?一定有一个简单的方法,但是我在我的代码中无法让它起作用。在多次尝试失败后,我目前有类似于以下内容:
<ScrollViewer CanContentScroll="True">
<TreeView ...>
</TreeView>
</ScrollViewer>
我看到了一个“禁用”的滚动条,但是当树形视图的注释超过屏幕高度时,没有激活滚动。
TreeView
控件本身在其模板中包含一个 ScrollViewer
。您应该能够直接在适当的宿主(而不是 StackPanel
!)中使用 TreeView
。
TreeView包含一个ScrollViewer,但正如@Carlo所说,TreeView或其容器需要具有高度。或者,应该将TreeView托管在不为其子元素提供无限高度的容器中(即@Kent可能是指的StackPanel)。因此,将其放置在Grid内,不需要为Grid或TreeView指定显式高度,您应该会得到滚动条。
您的窗口是否明确设置了高度?如果要看到滚动条,则必须定义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设置固定的高度和宽度,也许放在一个边框里会更好看。此外,我的项内容中有最大宽度。例如,在我的主窗口下面有两个堆栈面板,以下是使用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>
不必使用树形视图,可以使用展开器。它可以与滚动视图一起正常滚动,与树形视图的功能相同。
把高度和宽度都设置为固定值怎么样?我知道这可能不是每个人的答案。
StackPanel
的方向为水平时,它会给其内容提供任何宽度;当方向为垂直时,则提供任何高度。因此,如果你将一个TreeView
(或ListBox
或其他控件)放在StackPanel
中,TreeView
将认为它有足够的高度来显示所有项,而不需要滚动条。事实上,由于屏幕空间的限制,TreeView
将被裁剪。请改用Grid
。 - Kent BoogaartStackPanel
让它工作了。我只需要为我的 TreeView 设置一个Height
,现在滚动条就像预期的那样出现了。在过去的十年中,这个特性发生了什么变化,现在它可以与 StackPanel 一起使用了吗? - Stan1k