1

我有一个里面有一个网格的窗口:

<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 使用此 Grid 集获取 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 的内容更高,溢出只是隐藏。

4

2 回答 2

0

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

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

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

其次,将您GridSplitter的 DockPanel 移出。将分离器放在第 1 行,将停靠面板放在第 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>

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

于 2012-12-14T17:18:56.120 回答
0

如果我没记错的话,StackPanel 需要为滚动功能设置一个高度才能工作,因为 StackPanel 在设计上会朝一个方向增长(基于方向)。

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

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

于 2012-12-14T12:04:38.787 回答