2009-08-21 20 views
21

¿Alguien me puede ayudar con cómo habilitar una vista en árbol para desplazarse? Debe haber una manera simple pero no puedo hacer que funcione en mi código. Después de varios intentos fallidos, actualmente tengo algo como esto:Habilitar desplazamiento para WPF Treeview

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

Veo una barra de desplazamiento 'discapacitados', pero cuando las notas de la vista de árbol son más grandes que la altura de la pantalla, se activa sin desplazamiento.

Respuesta

34

El control TreeView en sí mismo incluye un ScrollViewer en su plantilla. Debería poder usar un TreeView dentro de un host apropiado (¡no un StackPanel!).

+3

¿Qué es exactamente un host apropiado? Sin embargo, mi TreeView SI se encuentra dentro de un StackPanel. – Ronald

+0

Creo que está hablando de que ScrollViewer no es el host apropiado, en cuanto a "¡no es un StackPanel!" parte, realmente no lo entiendo, no debería haber diferencia en el comportamiento de TreeView si lo usa en una cuadrícula, StackPanel, WrapPanel, UniformGrid, etc. – Carlo

+23

Un 'StackPanel' da su contenido de cualquier ancho (cuando la orientación es horizontal) o altura (cuando la orientación es vertical) sus hijos piden. Por lo tanto, si coloca un 'TreeView' (o' ListBox', o lo que sea) en un 'StackPanel', entonces' TreeView' pensará que tiene suficiente altura para mostrar todos los elementos sin la necesidad de 'ScrollBar'. De hecho, el 'TreeView' se cortará porque se te acabará la pantalla de bienes raíces. Use una 'Grilla' en su lugar. –

2

¿Tiene una altura establecida explícitamente en su ventana? Si desea ver la barra de desplazamiento, debe definir la altura del TreeView o su contenedor, de lo contrario, no sabrá cuándo necesita mostrar la barra de desplazamiento.

Ejemplo:

<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> 
+0

Lo siento, traté de agregar alturas a la vista de árbol y su contenedor pero sin éxito – Ronald

+0

Hmmm Obtuve la barra de desplazamiento, agregaré mi ejemplo a mi respuesta, veré si funciona, básicamente la altura de la ventana está establecida en 300 y el la altura de treeview está establecida en 150, por lo que la vista en árbol es la mitad de alta que la ventana y obtiene una barra de desplazamiento si sus elementos se desbordan. – Carlo

+0

Agregué una altura a la grilla y funcionó. –

6

El TreeView contiene un ScrollViewer, pero como dijo Copyright: @Carlo, la TreeView o su recipiente tiene que tener una altura. Alternativamente, el TreeView debe estar alojado en un contenedor que no dé una altura infinita a sus hijos (es decir, un StackPanel que creo que era lo que significaba @Kent). Así que colóquelo dentro de una cuadrícula, no es necesario darle una altura explícita a la cuadrícula o al TreeView y debería obtener las barras de desplazamiento.

0

En lugar de Vista en árbol, puede usar el expansor. Que puede desplazarse con la vista de desplazamiento correctamente este trabajo igual que Treeview.

0

Es simplemente una cuestión de darle al TreeView una altura y ancho fijos. Y tal vez ponerlo en un borde. Además, tengo un MaxWidth en el contenido de mis artículos. Por ejemplo, la siguiente es en mi ventana principal en dos paneles de la pila y funciona (estoy usando los controles 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> 
0

¿Qué tal ajuste de la altura y la anchura de una cantidad fija? Sé que esta podría no ser la respuesta para todos.

+1

Por lo que puedo decir, esto no responde la pregunta * en absoluto *. La altura y el ancho de * what * deben ser corregidos? ¿Y cómo eso habilitaría las barras de desplazamiento? –

+0

Lea la pregunta nuevamente. "Veo una barra de desplazamiento 'desactivada', pero cuando las notas de la vista de árbol son más grandes que la altura de la pantalla, no se activa el desplazamiento". estableciendo el alto y ancho en treeview. Esto es realmente mencionado en el post sobre el mío. Si recuerdo exactamente, una vez que el alto y el ancho se fijan en la vista de árbol, las barras de desplazamiento aparecen cuando se cambia el tamaño de la ventana principal. –