2009-08-21 13 views
21

Qualcuno può aiutarmi con come abilitare la visualizzazione ad albero per scorrere? Ci deve essere un modo semplice ma non riesco a farlo funzionare nel mio codice. Dopo molteplici tentativi non è riuscito, Al momento ho qualcosa di simile:Abilita scorrimento per WPF Treeview

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

Vedo una barra di scorrimento 'disabile', ma quando le note del TreeView sono più grandi di l'altezza dello schermo, senza scorrimento è attivato.

risposta

34

Il controllo TreeView include esso stesso un modello ScrollViewer. Dovresti essere in grado di utilizzare semplicemente un TreeView all'interno di un host appropriato (non uno StackPanel!).

+3

Che cos'è esattamente un host appropriato? La mia TreeView DOE giace all'interno di uno StackPanel però. – Ronald

+0

Penso che stia parlando del ScrollViewer che non è l'host appropriato, come per "non uno StackPanel!" parte, in realtà non capisco, non ci dovrebbero essere differenze nel comportamento di TreeView se lo si utilizza in una griglia, StackPanel, WrapPanel, UniformGrid, ecc. – Carlo

+23

Uno 'StackPanel' dà il suo contenuto a qualsiasi larghezza (quando l'orientamento è orizzontale) o altezza (quando l'orientamento è verticale) i suoi figli chiedono. Quindi, se metti un 'TreeView' (o' ListBox', o qualsiasi altra cosa) in uno 'StackPanel', il' TreeView' penserà che abbia un'altezza sufficiente per visualizzare tutti gli elementi senza la necessità di un 'ScrollBar'. In effetti, il 'TreeView' sarà tagliato perché si esaurirà lo schermo immobiliare. Usa invece una 'Grid'. –

2

Hai un'altezza impostata esplicitamente sulla tua finestra? Se vuoi vedere la barra di scorrimento qualcosa deve definire l'altezza del TreeView o del suo contenitore, altrimenti non saprà quando è necessario mostrare la barra di scorrimento.

Esempio:

<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

Scusa, ho provato ad aggiungere altezze alla treeview e al suo contenitore ma senza successo – Ronald

+0

Hmmm ho ottenuto la barra di scorrimento, aggiungerò il mio esempio alla mia risposta, vediamo se funziona, in pratica l'altezza della finestra è impostata su 300 e il l'altezza di treeview è impostata su 150, quindi la vista ad albero è alta la metà della finestra e ottiene una barra di scorrimento se i suoi elementi superano l'altezza. – Carlo

+0

Ho aggiunto un'altezza alla griglia e questo ha funzionato. –

6

La TreeView contiene uno ScrollViewer, ma come detto @Carlo, TreeView o il suo contenitore deve avere un'altezza. In alternativa, TreeView dovrebbe essere ospitato in un contenitore che non dia un'altezza infinita ai suoi figli (ad esempio uno StackPanel che penso fosse ciò che @Kent stava significando). Quindi posizionalo all'interno di una griglia, senza che sia necessario dare a Grid o TreeView un'altezza esplicita e dovresti ottenere le barre di scorrimento.

0

Invece di Tree View è possibile utilizzare Expander. Quale può scollare correttamente con la vista Scorrere questo funziona come Treeview.

0

Si tratta semplicemente di assegnare all'albero una altezza e una larghezza fisse. E magari mettilo in un confine. Inoltre, ho un MaxWidth sul contenuto dei miei articoli. Per esempio il seguente è nella mia finestra principale sotto due pannelli pila e funziona (sto usando controlli Metro MahApps):

<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

Come circa appena impostare l'altezza e la larghezza di un importo fisso? So che questa potrebbe non essere la risposta per tutti.

+1

Per quanto posso dire, questo non risponde alla domanda * affatto *. L'altezza e la larghezza di * cosa * dovrebbe essere corretto? E come consentirebbero le barre di scorrimento? –

+0

Per favore leggi di nuovo la domanda. "Vedo una barra di scorrimento" disabilitata ", ma quando le note della vista ad albero sono più grandi dell'altezza dello schermo, non viene attivato lo scorrimento." impostando l'altezza e la larghezza su treeview. Questo è effettivamente menzionato nel post sopra il mio. Se ricordo esattamente, quando l'altezza e la larghezza sono fissate sulla vista ad albero, le barre di scorrimento appaiono quando viene ridimensionata la finestra principale. –