3

エキスパンダー内に複数のツリービューがあり、コンテンツとともに高さが大きくなる可能性があります。ただし、高さがウィンドウのサイズより大きくなると、ウィンドウの外にはみ出してしまいます。

明らかな解決策は Treeview の MaxHeight を設定することですが、利用可能な高さが依存するため、簡単には判断できません。

  • 窓の高さ
  • その他のエキスパンダー (開閉)

ツリービューの高さを引き続き自動的に大きくするために何を変更する必要がありますが、ウィンドウの高さよりも大きくなることはありませんか?

<StackPanel CanVerticallyScroll="True" ClipToBounds="False" Height="Auto" Name="StackPanel2" Width="250" DockPanel.Dock="Left" Orientation="Vertical" VerticalAlignment="Top" CanHorizontallyScroll="False" Margin="5">
    <Border BorderThickness="0" CornerRadius="5" Padding="1" BorderBrush="Red" Margin="0,5" >
        <Expander Header="Expander3" Height="Auto" IsExpanded="False" Width="Auto" Margin="2" BorderThickness="1">
           <Grid  Height="Auto" Width="Auto" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" >

            <TreeView Height="Auto" BorderThickness="1" Margin="0,0,0,0" Padding="7" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" >
           </TreeView>

        </Grid>
    </Expander>
    </Border>
</StackPanel>
4

1 に答える 1

2

私が考えることができる 1 つの方法は、StackPanel を ScrollViewer に配置することです。このようにして、ウィンドウの高さを超えて拡大しないようにします。エキスパンダーごとに個別の Scroll を取得することはできません (それらが同じ StackPanel にある場合)。

<ScrollViewer Name="stackPanelScrollViewer"
              Loaded="stackPanelScrollViewer_Loaded"
              VerticalScrollBarVisibility="Auto">
    <StackPanel CanVerticallyScroll="True" ClipToBounds="False" Height="Auto" Name="StackPanel2" Width="250" DockPanel.Dock="Left" Orientation="Vertical" VerticalAlignment="Top" CanHorizontallyScroll="False" Margin="5">
        <Border BorderThickness="0" CornerRadius="5" Padding="1" BorderBrush="Red" Margin="0,5" >
            <Expander Header="Expander3" Height="Auto" IsExpanded="False" Width="Auto" Margin="2" BorderThickness="1">
                <Grid  Height="Auto" Width="Auto" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" >
                    <TreeView Name="treeView1" Height="Auto" BorderThickness="1" Margin="0,0,0,0" Padding="7" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" >
                    </TreeView>
                </Grid>
            </Expander>
        </Border>
    </StackPanel>
</ScrollViewer>

これの欠点は、TreeView の ControlTemplate 内に独自の ScrollViewer が定義されているため、マウスが TreeView の上にある場合、MouseWheel でスクロールできないことです。これを回避するには、TreeView ごとに MouseWheel イベント ハンドラーをアタッチし、そこから Scroll を作成します。

private void stackPanelScrollViewer_Loaded(object sender, RoutedEventArgs e)
{
    treeView1.AddHandler(MouseWheelEvent, new RoutedEventHandler(StackPanelMouseWheel), true);
    //treeView2.AddHandler(MouseWheelEvent, new RoutedEventHandler(StackPanelMouseWheel), true);
}
private void StackPanelMouseWheel(object sender, RoutedEventArgs e)
{
    MouseWheelEventArgs eargs = (MouseWheelEventArgs)e;
    double x = (double)eargs.Delta;
    double y = stackPanelScrollViewer.VerticalOffset;
    stackPanelScrollViewer.ScrollToVerticalOffset(y - x);
}
于 2010-12-05T19:44:08.800 に答える