WPF:内容不会滚动

时间:2012-12-14 10:48:29

标签: wpf xaml scroll scrollviewer

我有一个内置网格的窗口:

<Grid KeyboardNavigation.TabNavigation="Local">
    <Grid.RowDefinitions>
        <RowDefinition Height="Auto" MinHeight="70" />
        <RowDefinition Height="*" />
        <RowDefinition Height="25" />
    </Grid.RowDefinitions>

    <ContentControl Grid.Row="0" Content="{Binding ChildViewModel.View}" />

    <DockPanel Grid.Row="1" Visibility="{Binding SearchResultViewVisibility}">
        <GridSplitter DockPanel.Dock="Top" Background="LightGray" Height="5" HorizontalAlignment="Stretch" VerticalAlignment="Top" IsTabStop="False"/>
        <Views:SearchResultView DataContext="{Binding SearchResultViewModel}" />
    </DockPanel>

    <UserControls:GradientBackgroundControl Grid.Row="2" Height="25">
        <Validators:FocusSummaryControl x:Name="FocusSummary" ValidateOnlyFocusedElement="False" />
    </UserControls:GradientBackgroundControl>
</Grid>

ContentControl使用此网格集获取UserControl:

<Grid KeyboardNavigation.TabNavigation="Local">
<Grid.RowDefinitions>
    <RowDefinition />
    <RowDefinition Height="35" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
    <ColumnDefinition Width="80" />
    <ColumnDefinition Width="*" />
    <ColumnDefinition Width="80" />
    <ColumnDefinition Width="80" />
</Grid.ColumnDefinitions>

<ScrollViewer Grid.Row="0" Grid.ColumnSpan="4">
    <StackPanel>
        ...
    </StackPanel>
</ScrollViewer>

现在的问题是,UserControl中的ScrollViewer不会滚动。设置为ContentControl的UserControl的内容更高,溢出只是隐藏。

2 个答案:

答案 0 :(得分:0)

如果我没有错,StackPanel需要设置高度以使滚动功能起作用,因为StackPanel按设计在一个方向上增长(基于方向)。

要确认这是否是导致问题的原因,请将StackPanel的高度设置为固定高度进行测试。或者,您可能希望将StackPanel替换为DockPanel并查看行为。还有一个ScrollViewer.CanContentScroll属性,您可能想要摆弄它。

让我们知道这次测试的结果。

答案 1 :(得分:0)

我认为你需要重新安排一些事情。我的建议(我确信有无限的变化可行):

首先,在网格中添加一个新行(Height="Auto")并将顶行的高度(包含ContentControl)设置为"*"

<Grid.RowDefinitions>
  <RowDefinition Height="*" MinHeight="70" />
  <RowDefinition Height="Auto" />
  <RowDefinition Height="*" />
  <RowDefinition Height="25" />
</Grid.RowDefinitions>

其次,将GridSplitter移出DockPanel。将拆分器放在第1行,将dockpanel放在第2行。

<ContentControl Grid.Row="0" Content="{Binding ChildViewModel.View}" />

<GridSplitter Grid.Row="1" Background="LightGray" Height="5" HorizontalAlignment="Stretch" VerticalAlignment="Top" IsTabStop="False" ResizeBehavior="PreviousAndNext"/>

<DockPanel Grid.Row="2" Visibility="{Binding SearchResultViewVisibility}">
    <Views:SearchResultView DataContext="{Binding SearchResultViewModel}" />
</DockPanel>

请注意,您可能还需要为GridSplitter设置ResizeBehavior,如上所示。我希望这能让你接近你想要的东西。