我正在尝试格式化滚动视图以完全占用父容器,但看起来我错过了一些东西。任何建议都会很棒。
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>
答案 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开发。