如何动态设置WPF 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>
它创建了这个:
我的问题是如何动态设置 ScrollViewer.Height
同时仍然能够看到滚动条的底部?在我的示例中,ScrollViewer
的 Height
太长,因为它上面有 Label
..
我不想修复 <将 ScrollViewer
的 code>Height 设置为静态值。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我建议将外部 StackPanel 删除到网格中,因为 Stackpanel 不会考虑子级的大小。并删除 ScrollViewer.Height 绑定。现在您只需为 Grid 创建两个 RowDefinition,并将 Label 设置为 Grid.Row=0,将 ScrollViwer 设置为 Grid.Row=1。
代码如下。所以我的建议是,仅在必要时使用 StackPanel/Canvas,并且可能用于内部级别。尝试更多地使用网格以获得非常动态的布局。
I would recommend to remove the outer StackPanel to a Grid, since Stackpanel wont respect the children size. And remove the ScrollViewer.Height binding. Now you just need to create two RowDefinition for the Grid and place the Label to Grid.Row=0 and ScrollViwer to Grid.Row=1.
Code is below. So my tip here is, use StackPanel/Canvas only if necessary and may be for the inner levels. Try to use Grid more to get very dynamic layouts.