WPF ScrollViewer 调整大小问题

3

我在WPF中使用ScrollViewer遇到了问题。

当窗口被缩小到需要启用ScrollViewer时,窗口不会调整包含的网格的大小,导致滚动条底部消失了。

我尝试将其高度绑定到包含网格的高度,但没有成功。

以下是我的XAML代码:

 <Grid x:Name="MainGrid" Width="Auto" Height ="Auto" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
    <StackPanel Height="134" Width="Auto" VerticalAlignment="Top" Background="Blue" HorizontalAlignment="Stretch">
        <Label x:Name="ProjectNumberLabel" Content="ProjectNumber" HorizontalAlignment="Left" Height="45.5" VerticalAlignment="Top" Width="350" FontSize="32" Margin="10,0,0,0" Foreground="White"/>

        <Label x:Name="ProjectNameLabel" Content="ProjectName" HorizontalAlignment="Stretch" Height="42" VerticalAlignment="Top" FontSize="24" Margin="10,0,0,0" Foreground="White" Width="auto"/>

        <Label x:Name="SetLabel" Content="Set Id" HorizontalAlignment="Stretch"   Width="Auto" Height="42" Margin="10,0,10,0" FontSize="24" VerticalAlignment="Top" Foreground="White" />

    </StackPanel>

    <ScrollViewer HorizontalAlignment="Stretch" Margin="0,140,0,0" Width="Auto" CanContentScroll="True" Height="{Binding ElementName=MainGrid, Path=ActualHeight  }">
        <StackPanel Name="ContainingPanel" VerticalAlignment="Top" HorizontalAlignment="Stretch" Width="Auto" Height="Auto">
            <StackPanel HorizontalAlignment="Stretch" Width="Auto" Height="300"/>

            <StackPanel HorizontalAlignment="Stretch" Height="38" VerticalAlignment="Bottom">
                <CheckBox x:Name="ComplexDataCheckBox" Content="Show All Data" Click="ComplexDataCheckBox_Click" RenderTransformOrigin="1.751,0.547" Margin="0,4,0,0" Height="16" HorizontalAlignment="Right" Width="105" VerticalAlignment="Bottom">
                    <CheckBox.LayoutTransform>
                        <ScaleTransform ScaleX="2" ScaleY="2" />
                    </CheckBox.LayoutTransform>
                </CheckBox>
            </StackPanel>

            <StackPanel HorizontalAlignment="Stretch">
                        <syncfusion:SfDataGrid HorizontalAlignment="Stretch" Width="Auto" VerticalAlignment="Stretch" x:Name="SpecimenGrid" AutoGenerateColumns="True" RowStyleSelector="{StaticResource styleselector}"/>
            </StackPanel>

        </StackPanel>
    </ScrollViewer>
</Grid>

看到您放置组件的方式,外部网格是无用的,DockPanel 就足够了。要在网格中放置其他控件,必须定义 ColumnDefinitionsRowDefinitions。至于 ScrollViewer,不要定义其高度,而是定义 VerticalAlignement 为 stretch。一旦内容不再适合,滚动条就会出现。 - Irwene
1个回答

4

如果 ScrollViewer 的高度与 Grid 高度相等 并且 垂直边距不为零,则它会超出 Grid 边界。

最好将 StackPanel 和 ScrollViewer 放在两个单独的 Grid 行中:

<Grid x:Name="MainGrid">
    <Grid.RowDefinitions>
        <RowDefinition Height="140"/>
        <RowDefinition Height="*"/>
    </Grid.RowDefinitions>

    <StackPanel Grid.Row="0">
        <!--Content-->
    </StackPanel>

    <ScrollViewer Grid.Row="1" 
                  HorizontalAlignment="Stretch" 
                  Margin="0"
                  CanContentScroll="True" >
        <!--Content-->
    </ScrollViewer>
</Grid>

我已经尝试了你建议的方法,似乎ScrollViewer的高度仍然想匹配它的内容,而不是它所在的容器Grid行。 - laxin204
没关系,整个内容都包含在另一个StackPanel中,我也将其更改为Grid,问题现在已经解决。非常感谢您的帮助。 - laxin204

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接