【发布时间】:2011-08-26 13:22:24
【问题描述】:
我想要什么: 我想在我的 Silverlight 4 应用程序中有一个 ScrollView,它与内容一起在高度上增长,但确实会显示一个滚动条,否则它会比它的容器高。
我找到的解决方案: 我发现很多问题的解决方案是拉伸 Scrollviewer,但这 不是 我想要的。 Scrollviewer 应始终尽可能小。
我的问题: 为了让它在滚动查看器的顶部更难一点,一个标题被定位,它是一个具有静态高度的堆栈面板。
解决方案方法 1: 我首先使用纯 XAML 进行了尝试,但我不知道它应该如何工作。
<Grid Height="Auto" x:Name="myGrid" >
<Grid.RowDefinitions>
<RowDefinition Height="100"/>
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<StackPanel Grid.Row="0" Background="AliceBlue">
<!-- Dummy Header-->
</StackPanel>
<ScrollViewer Grid.Row="1" Height="Auto">
<Button Width="100" Height="50" Click="Button_Click" />
<!-- onClick the button will switch between height="600" and height="50"
Code:
private void Button_Click(object sender, RoutedEventArgs e)
{
if (sender is Button)
{
Button btn = (Button)sender;
btn.Height = (btn.Height == 50) ? 600 : 50 ;
}
}
-->
</ScrollViewer>
</Grid>
如果您单击按钮,它会变得更高,并且 Scrollviewer 将被剪切,因为它太高了。有什么建议吗?
解决方法二: 然后我尝试将 ScrollViewer 的 *max*Height 设置为包含容器的实际高度,因此我在 ScrollViewer 周围插入了一个 StackPanel。这确实适用于 VS2010 XAML 设计器,但不适用于代码执行。我不知道为什么......
<Grid Height="Auto" x:Name="myGrid" >
<Grid.RowDefinitions>
<RowDefinition Height="100"/>
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<StackPanel Grid.Row="0" Background="AliceBlue">
<!-- Dummy Header-->
</StackPanel>
<StackPanel Grid.Row="1" x:Name="myStackPanel" Height="Auto" VerticalAlignment="Stretch">
<ScrollViewer Height="Auto" MaxHeight="{Binding ElementName=myStackPanel, Path=ActualHeight}">
<Button Width="100" Height="50" Click="Button_Click" />
<!-- onClick the button will switch between height="600" and height="50"
Code:
private void Button_Click(object sender, RoutedEventArgs e)
{
if (sender is Button)
{
Button btn = (Button)sender;
btn.Height = (btn.Height == 50) ? 600 : 50 ;
}
}
-->
</ScrollViewer>
</StackPanel>
</Grid>
提前致谢!
【问题讨论】:
标签: silverlight silverlight-4.0 scrollviewer