WPF ScrollViewer调整偏移量问题

时间:2009-10-19 00:33:58

标签: wpf xaml resize scrollviewer

我有以下测试样本:

<Window x:Class="WpfScrollTest.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="Window1" Height="200" Width="200">
    <Border>
        <StackPanel>
            <Label Width="Auto" Height="Auto" Content="Text to mess up the scrollview"/>
                <ScrollViewer Height="{Binding RelativeSource={RelativeSource FindAncestor, 
                        AncestorType={x:Type Border}}, Path=ActualHeight}">
                    <StackPanel>
                        <Button MinWidth="100" MinHeight="100" Content="Button"/>
                        <Button MinWidth="100" MinHeight="100" Content="Button"/>
                    </StackPanel>
                </ScrollViewer>
            </StackPanel>
    </Border>
</Window>

创造了这个:

Scrollbar bottom missing http://img33.imageshack.us/img33/8200/scrolloffsetmissing.jpg

我的问题是如何动态设置ScrollViewer.Height,同时仍能看到滚动条的底部?在我的示例中,Height的{​​{1}}太长了,因为它上面有ScrollViewer ..

我不想将Label的{​​{1}}修复为静态值。

1 个答案:

答案 0 :(得分:1)

我建议将外部StackPanel移除到网格,因为Stackpanel不会尊重孩子的大小。并删除ScrollViewer.Height绑定。现在,您只需要为Grid创建两个RowDefinition,并将Label放置到Grid.Row = 0并将ScrollViwer放置到Grid.Row = 1。

代码如下。所以我的提示是,只在必要时使用StackPanel / Canvas,可能是内层。尝试使用Grid更多来获得非常动态的布局。

  <Border>
    <Grid>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto"/>
            <RowDefinition Height="*"/>
        </Grid.RowDefinitions>
        <Label Grid.Row="0" Width="Auto" Height="Auto" Content="Text to mess up the scrollview"/>
        <ScrollViewer Grid.Row="1" >
            <StackPanel>
                <Button MinWidth="100" MinHeight="100" Content="Button"/>
                <Button MinWidth="100" MinHeight="100" Content="Button"/>
            </StackPanel>
        </ScrollViewer>
    </Grid>
</Border>