ScrollBar嵌套在ScrollViewer中的无限控制

时间:2011-02-22 14:47:11

标签: wpf xaml

有人可以向我解释为什么以下XAML不能按照我预期的方式工作,以及是否有任何解决方法?

我希望TextBox遵守它使用的RowDefinition的Min-和MaxHeight属性。相反,它的MaxHeight用于掩盖可用空间,但同时它的内容正在掩盖后面...... Ehhhh?!

我期望的行为与为RowDefinition提供非无限高度,2个滚动条时的行为相同。一个ScrollBar用于TextBox,另一个用于屏幕的其余部分。

<ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto">
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="40" />
            <RowDefinition MinHeight="100" MaxHeight="200" />
            <RowDefinition Height="40" />
        </Grid.RowDefinitions>

        <Button Content="Top" />

        <TextBox Grid.Row="1" AcceptsReturn="True" xml:space="preserve" VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Auto">

            ***Enter a lot of text including enters here!***

        </TextBox>

        <Button Content="Bottom" Grid.Row="2" />
    </Grid>
</ScrollViewer>

希望有人可以帮我解决这个问题。

谢谢,

维姆

2 个答案:

答案 0 :(得分:0)

在TextBox上设置最小和最大高度可以使滚动条正确显示。

                <TextBox Grid.Row="1"
                     AcceptsReturn="True"
                     xml:space="preserve"
                     MinHeight="100"
                     MaxHeight="200"
                     VerticalScrollBarVisibility="Auto"
                     HorizontalScrollBarVisibility="Auto">

答案 1 :(得分:0)

这确实是一种奇怪的行为。

看起来像Grid本身没有大小限制(在ScrollViewer中并且没有设置Height)的组合,而没有Height设置为绝对值的RowDefinition没有正确约束TextBox。

如果你绝对需要这个星座并且不想依赖任何其他东西,你可以这样做:

<RowDefinition MinHeight="100" MaxHeight="200" Height="{Binding ActualHeight, RelativeSource={RelativeSource Self}}"/>