如何在ScrollViewer中使用流布局?

时间:2013-07-11 03:52:26

标签: wpf xaml

我有一个滚动查看器的情况,以及该滚动查看器内部的包装面板。预期的行为是内容不会向左和向右滚动,只能向上和向下滚动,并且内容会根据需要换行(变得更高)。

<ScrollViewer VerticalScrollBarVisibility="Auto" HorizontalScrollBarVisibility="Hidden" Margin="0">
    <Grid x:Name="LayoutRoot">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="330" />
            <ColumnDefinition Width="*"/>
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="74" />
            <RowDefinition Height="75" />
            <RowDefinition Height="Auto" />
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>
        <!-- ... other stuff ... -->

        <WrapPanel Grid.Row="2" Grid.Column="0" Grid.ColumnSpan="2" Orientation="Horizontal" Margin="35,0,0,0">
            <Button Style="{StaticResource CreateModelButtonStyle}"
                    CommandParameter="Design"
                    Command="{StaticResource WindowProfileUnconditional}">
                <StackPanel>
                    <TextBlock Style="{StaticResource HomePageButtonMarqeeTextStyle}" Text="Blah Blah"/>
                    <TextBlock Style="{StaticResource HomePageButtonDescriptionTextStyle}" Text="Blah Blah" />
                </StackPanel>
            </Button>

            <!-- A bunch more buttons -->
        </WrapPanel>

        <!-- ... other stuff ... -->

    </Grid>
</ScrollViewer>

我得到的行为是滚动查看器告诉包装面板它可以是任何宽度,因此包装面板的行为类似于堆栈面板和剪辑而不是包装。

是否有某种方法允许垂直滚动,同时完全阻止水平滚动?

1 个答案:

答案 0 :(得分:0)

为什么不将WrapPanel(或Grid)的宽度绑定到ScrollViewer的宽度?

<ScrollViewer x:Name="MyScrollViewer" ...>
    <WrapPanel Width="{Binding ElementName=MyScrollViewer, Path=Width}" ... />
</ScrollViewer>

如果您需要绑定到WidthActualWidth,则不是肯定的。如果一个不起作用,请尝试另一个。