2009-08-21 56 views
21

誰かがツリービューをスクロールする方法を教えてくれますか?簡単な方法でなければなりませんが、自分のコード内で動作させることはできません。複数の試行に失敗した後、私は現在、このようなものがあります:WPFのスクロールを有効にするツリービュー

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

私が「無効」のスクロールバーを見ていますが、しかし、ツリービューのノートは画面の高さよりも大きいとき、何のスクロールが有効にされません。

答えて

34

TreeViewコントロール自体には、テンプレートにScrollViewerが含まれています。適切なホストの中にTreeViewを使用するだけでよい(StackPanel!ではない!)。

+3

正確には適切なホストは何ですか?私のTreeViewはStackPanelの中​​にあります。 – Ronald

+0

私は彼が、 "not a StackPanel"のように、適切なホストではないScrollViewerについて話していると思います。あなたがグリッド、StackPanel、WrapPanel、UniformGridなどでそれを使うならば、TreeViewの振る舞いに違いはないはずです。 – Carlo

+23

'StackPanel'は、どのような幅でもコンテンツを与えます(向きが水平のとき)、または高さ(向きが垂直の場合)を指定します。したがって、 'TreeView'(または' ListBox'など)を 'StackPanel'に置くと' TreeView'は 'ScrollBar'を必要とせずにすべての項目を表示するのに十分な高さを持っていると考えられます。実際には、 'TreeView'は画面の不動産を使い果たしてしまいます。代わりに 'Grid'を使用してください。 –

2

ウィンドウに高さが明示的に設定されていますか?スクロールバーを表示するには、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> 
+0

申し訳ありませんが、ツリービューとそのコンテナに高さを追加しようとしましたが、成功しません。 – Ronald

+0

スクロールバーを取得しました。私の答えに私の例を追加します。 treeviewの高さは150に設定されているので、ツリービューはウィンドウの半分の高さになり、項目が高さを超えてオーバーフローするとスクロールバーが表示されます。 – Carlo

+0

グリッドに高さを追加しました。 –

6

ツリービューは、ScrollViewerのを含むが、@Carloが言ったように、ツリービューまたはその容器は、高さを有する必要があります。代わりに、ツリービューは、子に無限の高さを与えないコンテナでホストする必要があります(つまり、@Kentが意味するStackPanelだと思います)。グリッド内に配置します。グリッドやツリービューに明示的な高さを設定する必要はなく、スクロールバーを取得する必要があります。

0

ツリービューではなく、エクスパンダを使用できます。スクロールビューではスクロールできますが、ツリービューと同じように正しく動作します。

0

TreeViewに固定高さと幅を指定するだけです。そしてそれを国境に置くかもしれない。また、アイテムのコンテンツにMaxWidthがあります。たとえば、次は2枚のスタックパネルの下に私のメインウィンドウ内にある、それは(私が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

方法だけで一定量に高さと幅の設定は? これは誰にとっても答えではないかもしれません。

+1

私が知る限り、これは*すべての質問には答えません。 *何*の高さと幅を修正する必要がありますか?スクロールバーはどのように有効になりますか? –

+0

質問をもう一度お読みください。 「私は「無効」スクロールバーが表示されますが、ツリービューのノートが画面の高さよりも大きい場合、スクロールは有効になりません。ツリービューの高さと幅を設定します。これは実際に上記の私の記事で言及されています。私が正確に思い出すと、高さと幅がツリービューに固定されると、メインウィンドウのサイズを変更するとスクロールバーが表示されます。 –

関連する問題