WPF Scrollviewer无法使用动态高度

时间:2014-05-16 15:00:55

标签: wpf xaml

尝试将Scrollviewer添加到TextBlock,以便用户可以向下滚动内容,这些内容通常比可用的屏幕空间更长。

道歉可能是一个愚蠢的问题:我可以看到有很多关于此问题的主题,问题通常是某个固定的高度,但我很难看到哪个元素导致了我的XAML中的问题:< / p>

<Popup StaysOpen="True" Placement="Center" IsOpen="{Binding SummaryOpen}" PlacementTarget="{Binding ElementName=Areas}">
    <Border Background="LightGray" BorderBrush="Black" Padding="5" BorderThickness="1">
        <Grid Width="500">
            <Grid.RowDefinitions>
                <RowDefinition Height="50" />
                <RowDefinition Height="350" />
                <RowDefinition Height="40" />
            </Grid.RowDefinitions>
            <StackPanel Grid.Row="0" Orientation="Horizontal">
                <Label Content="{Binding Name}" />
                <Label Content=": " />
                <Label Content="{Binding Description}" />
            </StackPanel>
            <Border Grid.Row="1" BorderBrush="Black" BorderThickness="1">
                <StackPanel Background="White" Margin="-1,1,1,-1">
                    <!-- this is the rogue element -->
                    <ScrollViewer VerticalScrollBarVisibility="Auto">
                        <TextBlock Text="{Binding Summary}" TextWrapping="Wrap"  />
                    </ScrollViewer>
                </StackPanel>
            </Border>
        </Grid>
    </Border>
</Popup>

ScrollViewer出现,但从不包含实际的滚动条,无论TextBlock中有多少内容。

如果有人能够解释问题所在以及如何解决问题,我将非常感激。

1 个答案:

答案 0 :(得分:2)

流氓元素实际上是父StackPanel - 该面板本身不是“固定高度”,但它不能作为ScrollViewer的父级。原因是它将可用高度报告为无限高,因此子ScrollViewer认为它可以扩展到子项所需的范围,因此它不需要滚动。

看起来您可以轻松地使用边框或网格,其中任何一个都会将其高度限制为父高度,从而解决问题:

        <Border Grid.Row="1" BorderBrush="Black" BorderThickness="1">
            <Border Background="White" Margin="-1,1,1,-1">
                <!-- this is the rogue element -->
                <ScrollViewer VerticalScrollBarVisibility="Auto">
                    <TextBlock Text="{Binding Summary}" TextWrapping="Wrap"  />
                </ScrollViewer>
            </Border>
        </Border>