顶级Scroll Viewer中的嵌套用户控件不会导致滚动条

时间:2018-12-30 22:09:17

标签: wpf user-controls

我有一个带有滚动查看器的主窗口,其中包含用户控件和项目控件:

   <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>

我这样做是为了显示一个带有用于观察结果的分隔标头的布局,并相应地构造了我的数据。如果没有滚动条,这将毫无用处。

2 个答案:

答案 0 :(得分:1)

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

<UserControl x:Class="ucObsevationsHeader"

除此之外,我无法复制它,这向我暗示这可能是一个主题问题。我认为您将必须提供mcve

答案 1 :(得分:0)

在MainWindow中,我定义了4行:

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

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