格式化ScrollView以占用父容器

时间:2011-09-28 22:58:48

标签: c# silverlight xaml

我正在尝试格式化滚动视图以完全占用父容器,但看起来我错过了一些东西。任何建议都会很棒。

XAML:

<Border Grid.Row="0" BorderBrush="#1B5468" BorderThickness="3,3,3,3" CornerRadius="7,7,7,7" Margin="5,0,5,5">
    <StackPanel Height="Auto" Width="Auto" VerticalAlignment="Stretch" HorizontalAlignment="Stretch">
        <StackPanel HorizontalAlignment="Center" Width="350" Height="30">
            <Grid>
                <Grid.RowDefinitions>
                    <RowDefinition Height="*"></RowDefinition>
                </Grid.RowDefinitions>
                <Image Source="../Images/Blue.png" Stretch="Fill" Margin="7,0,5,-27" Height="52" />
                <TextBlock HorizontalAlignment="Center" Height="Auto"  Margin="36,3,-2,4" Name="lblHeader" Text="Comments" VerticalAlignment="Center" Width="Auto" Foreground="Silver" FontWeight="Bold" FontSize="12" />
            </Grid>
        </StackPanel>
        <ScrollViewer Height="Auto" HorizontalAlignment="Stretch" Name="dComments_Scroll" VerticalAlignment="Stretch" Width="Auto" HorizontalContentAlignment="Left" VerticalContentAlignment="Top">

            <StackPanel Height="Auto" Name="dStack_Comments" Width="Auto" HorizontalAlignment="Left" VerticalAlignment="Top" UseLayoutRounding="False">
            </StackPanel>
        </ScrollViewer>
    </StackPanel>
</Border>

enter image description here

1 个答案:

答案 0 :(得分:3)

通过将ScrollViewer放入StackPanel,你会说“让这个ScrollViewer足够高以容纳其内容”。这就是StackPanel的目的 - 让每个孩子都能够显示出所有内容所需的高度,然后将下一个孩子直接叠在下面。如果那不是您想要的布局,请不要使用StackPanel。

编辑:您可能需要网格,而不是边框​​内的StackPanel。 (我最初编写了DockPanel,忘记了Silverlight没有附带DockPanel。)网格足够灵活,可以让你自动控制一些控件,其他控件可以填充(或共享)剩余的可用控件空间。

<Border ...>
    <Grid ...>
        <Grid.RowDefinitions>
            <RowDefinition Height="Auto" />
            <RowDefinition Height="*" />
        </Grid.RowDefinitions>
        <StackPanel Grid.Row="0" ...>
            ...
        </StackPanel>
        <ScrollViewer Grid.Row="1" ...>
            ...
        </ScrollViewer>
    </Grid>
</Border>

此外,一旦你开始工作,我强烈建议你看看你是否可以简化你的XAML。您将很多属性设置为默认值(例如HorizontalAlignment="Stretch"Height="Auto"),这使您的XAML更难以阅读和维护。如果您可以开始了解可以删除哪些属性并保持相同的行为,那么您将更好地处理XAML开发。