web-dev-qa-db-ja.com

WPFツリービューのスクロールを有効にする

ツリービューをスクロールできるようにする方法を教えてもらえますか?簡単な方法があるはずですが、コードでそれを機能させることはできません。複数回失敗した後、私は現在次のようなものを持っています:

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

「無効」スクロールバーが表示されますが、ツリービューのメモが画面の高さよりも大きい場合、スクロールはアクティブになりません。

25
Ronald

TreeViewコントロール自体には、テンプレートにScrollViewerが含まれています。適切なホスト内でTreeViewを使用できるはずです(StackPanel!ではありません)。

37
Kent Boogaart

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

7
drjeks

ウィンドウに明示的に設定された高さはありますか?スクロールバーを表示する場合は、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>
3
Carlo

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

ツリービューの代わりに、エキスパンダーを使用できます。 Scrollviewで適切にスクロールできるものこれはTreeviewと同じように機能します。

0
Dipesh Bagdi

高さと幅を一定に設定するだけではどうでしょうか。私はこれがすべての人にとっての答えではないかもしれないことを知っています。