如何在Stackpanel中调整ScrollViewer的大小以适应窗口的大小

本文关键字:窗口 ScrollViewer Stackpanel 调整 | 更新日期: 2023-09-27 18:19:06

我创建一个固定尺寸的画布,尺寸为A4纸(21cm x 29,7cm)。

我想在ScrollViewer和StackPanel中滚动。然而,ScrollViewer似乎没有根据窗口的大小调整其大小。我怎样才能做到这一点呢?

这是我到目前为止的代码。{}之间的文本将被删除以提高可读性。

<Window {xmlns stuff here} Width="900" Height="1200"  >
    <StackPanel>
        <my:Ribbon ShowQuickAccessToolBarOnTop="False">
            { ... Ribbon definition ... }
        </my:Ribbon>
        <ScrollViewer HorizontalScrollBarVisibility="Auto" 
                      VerticalScrollBarVisibility="Visible" > 
            <Canvas x:Name="PageCanvas"  HorizontalAlignment="Left"  
                    VerticalAlignment="Top" Width="21cm" Height="29.7cm"  >
                { ... Various drawings and elements here ... }
            </Canvas>
        </ScrollViewer>
    </StackPanel >
</Window>

如何在Stackpanel中调整ScrollViewer的大小以适应窗口的大小

StackPanel被设计成在一个方向上无限增长。所以你不能完成你的任务没有固定的高度StackPanel或没有替换StackPanel与另一个面板(如网格为例)。

我建议你使用Grid:

<Window {xmlns stuff here} Width="900" Height="1200"  >
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto">
            <RowDefinition Height="*">
        </Grid.RowDefinitions>
        <my:Ribbon ShowQuickAccessToolBarOnTop="False" Grid.Row="0">
            { ... Ribbon definition ... }
        </my:Ribbon>
        <ScrollViewer HorizontalScrollBarVisibility="Auto"  Grid.Row="1"
                      VerticalScrollBarVisibility="Visible" > 
            <Canvas x:Name="PageCanvas"  HorizontalAlignment="Left"  
                    VerticalAlignment="Top" Width="21cm" Height="29.7cm"  >
                { ... Various drawings and elements here ... }
            </Canvas>
        </ScrollViewer>
    </StackPanel >
</Window>