如何将 Stackpanel 内的 ScrollViewer 的大小调整为 Window 的大小?

How to adapt the size of a ScrollViewer inside a Stackpanel to the size of the Window?

我创建了一个固定大小 canvas 的 A4 纸大小 (21cm x 29.7cm)。

我希望它在 ScrollViewer 和 StackPanel 中滚动。 但是,ScrollViewer 似乎没有调整其大小以适应 window 的大小。我怎样才能做到这一点?

到目前为止,这是我的代码。为了便于阅读,删除了大括号 { } 之间的文本。

<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 被设计为在一个方向上无限增长。因此,如果不固定 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>