Ответ 1
Сам элемент TreeView
включает ScrollViewer
в свой шаблон. Вы должны просто использовать TreeView
внутри соответствующего хоста (а не StackPanel
!).
Может кто-нибудь помочь мне в том, как включить прокрутку дерева? Должен быть простой способ, но я не могу заставить его работать в моем коде. После нескольких неудачных попыток у меня в настоящее время есть что-то вроде этого:
<ScrollViewer CanContentScroll="True">
<TreeView ...>
</TreeView>
</ScrollViewer>
Я вижу "пропущенную" полосу прокрутки, но когда ноты дерева больше высоты экрана, никакая прокрутка не активируется.
Сам элемент TreeView
включает ScrollViewer
в свой шаблон. Вы должны просто использовать TreeView
внутри соответствующего хоста (а не StackPanel
!).
TreeView содержит ScrollViewer, но, как сказал @Carlo, TreeView или его контейнер должны иметь высоту. Альтернативно, TreeView должен размещаться в контейнере, который не дает бесконечной высоты его дочерним элементам (т.е. StackPanel, который, как мне кажется, означает значение @Kent). Поэтому поместите его внутри сетки, не нужно давать сетке или 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>
Вместо Tree View вы можете использовать Expander. Который может scoll С просмотром прокрутки правильно это работает так же, как Treeview.
Это просто вопрос предоставления 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>
Как просто установить высоту и ширину на фиксированную сумму? Я знаю, что это не может быть ответом для всех.