顶级滚动查看器中的嵌套用户控件不会导致滚动条

Nested User Controls in top level Scroll Viewer not resulting in a scroll bar

我有一个主 window 和一个滚动查看器,其中的房屋和项目通过用户控件进行控制:

   <ScrollViewer VerticalScrollBarVisibility="Visible" Grid.Column="0" Grid.Row="3" Grid.ColumnSpan="2">
        <ItemsControl ItemsSource="{Binding oObsByDiv}">
            <ItemsControl.ItemTemplate>
                <DataTemplate>
                    <uc:ucObservationsHeader/>
                </DataTemplate>
            </ItemsControl.ItemTemplate>
        </ItemsControl>
    </ScrollViewer>

ucObservationsHeader 在另一个用户控件中显示带有嵌套观察列表的标题栏。这超出了页面,我有一个可见的滚动条,但它不允许任何滚动。我认为滚动查看器只是将顶级用户控件视为不需要任何滚动,即使嵌套内容在屏幕下方滚动。我如何让它工作?

这是 ucObservationsHeader 和 ucObservations xaml: 观察头:

<UserControl x:Class="ucObsevationsHeader"
<Grid>
<Grid.ColumnDefinitions>
    <ColumnDefinition Width="100"/>
    <ColumnDefinition Width="300*"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
    <RowDefinition Height="20"/>
    <RowDefinition Height="100*"/>
</Grid.RowDefinitions>
<TextBox x:Name="divNum" Text="{Binding DivNum, Mode=OneWay}" 
    Grid.Column="0" Grid.Row="0" Margin="0,3,0,0"/>
<TextBox x:Name="divName" Text="{Binding DivName, Mode=OneWay}" 
    Grid.Column="1" Grid.Row="0" Margin="0,3,0,0"/>
    <ItemsControl ItemsSource="{Binding lObs}" Grid.Row="1" Grid.Column="1">
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <uc:ucObservationsView/>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>
</Grid></UserControl>

观察:

<UserControl x:Class="ucObservationsView">
<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="25"/>
        <RowDefinition Height="25*"/>
        <RowDefinition Height="25*"/>
    </Grid.RowDefinitions>
    <Grid.ColumnDefinitions>
        <ColumnDefinition Width=".2*"/>
        <ColumnDefinition Width=".4*"/>
        <ColumnDefinition Width=".4*"/>
    </Grid.ColumnDefinitions>
    <TextBox x:Name="txtDivObs" HorizontalAlignment="Stretch" TextWrapping="Wrap" Text="{Binding obsFullNum, Mode=OneWay}" Grid.Column="0" Grid.Row="0"/>
    <Label x:Name="lblOpenDate" HorizontalAlignment="Left" Content="Open " Grid.Column="1" Grid.Row="0"/>
    <DatePicker x:Name="dtOpen" HorizontalAlignment="Right" SelectedDate="{Binding Opendate, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Grid.Column="1" Grid.Row="0"/>
    <Label x:Name="lblCLoseDate" HorizontalAlignment="Left" Content="Close " Grid.Column="2" Grid.Row="0"/>
    <DatePicker x:Name="txtCloseDate" HorizontalAlignment="Right" SelectedDate="{Binding Closedate}" Grid.Column="2" Grid.Row="0"/>
    <TextBox x:Name="txtDescription" HorizontalAlignment="Stretch" TextWrapping="Wrap" Text="{Binding Description}" VerticalAlignment="Top" Grid.ColumnSpan="3" Grid.Row="1"/>
    <TextBox x:Name="txtImagePath" HorizontalAlignment="Stretch" TextWrapping="Wrap" Text="{Binding ImagePath}" Grid.Row="2" Grid.ColumnSpan="3">
        <i:Interaction.Triggers>
            <i:EventTrigger EventName="PreviewMouseLeftButtonUp">
                <i:InvokeCommandAction Command="{Binding 
                   DataContext.PreviewImage, RelativeSource={RelativeSource AncestorType={x:Type Window}}}"
                                       CommandParameter="{Binding}"/>
            </i:EventTrigger>
        </i:Interaction.Triggers>
    </TextBox>
</Grid>
</UserControl>

我这样做是为了显示带有 headers 分区的观察布局,并相应地构建了我的数据。如果滚动条不工作,这是没有用的。

我怀疑这可能与您在 ucObservationsHeader 中的拼写错误有关,尽管这通常会引发编译错误:

<UserControl x:Class="ucObsevationsHeader"

除此之外我无法重现它,这在我看来可能是主题问题。我认为您必须提供 mcve.

在我的主窗口中,我定义了 4 行:

<Grid.RowDefinitions>
<RowDefinition Height="25"/>
<RowDefinition Height="Auto"/>
<RowDefinition Height="50"/>
<RowDefinition Height="Auto"/>
</Grid.RowDefinitions>

第 4 行是我在滚动查看器中的用户控件所在的位置。 Auto 是导致我出现问题的原因,将其设置为“200*”解决了问题并且滚动条按预期出现。我不确定为什么我首先将其设置为自动,但如果有人遇到类似情况,则需要注意这一点。