我的意图很简单。创建一个排序面板,用户可以在该面板中滚动该特定面板中的许多控件。该面板中的控件可以是按钮,图像或标签。无论如何。
事情是......如果我让我的ScrollViewer垂直,它会滚动,但它不会显示自身内的所有控件,而且,它不会停留在我滚动它的位置。如果我将它设置为水平,这就是我想要它的方式,它根本不会滚动...不是一点。
以下是我的代码:请帮助!
<ScrollViewer Height="118" Name="scrollerButtons" Width="362" Canvas.Left="167" Canvas.Top="275" VerticalAlignment="Center">
<StackPanel Height="97" Name="stackPanelButtons" Width="168" Orientation="Horizontal" Canvas.Left="162" Canvas.Top="43" VerticalAlignment="Center" HorizontalAlignment="Center">
<Button Width="60" Height="60"> </Button>
<Button Width="60" Height="60"></Button>
<Button Width="60" Height="60"></Button>
<Button Width="60" Height="60"></Button>
<Button Width="60" Height="60"></Button>
<Button Width="60" Height="60"></Button>
<Button Width="60" Height="60"></Button>
<Button Width="60" Height="60"></Button>
<Button Width="60" Height="60"></Button>
<Button Width="60" Height="60"></Button>
<Button Width="60" Height="60"></Button>
<Button Width="60" Height="60"></Button>
<Button Width="60" Height="60"></Button>
<Button Width="60" Height="60"></Button>
<Button Width="60" Height="60"></Button>
<Button Width="60" Height="60"></Button>
<Button Width="60" Height="60"></Button>
<Button Width="60" Height="60"></Button>
</StackPanel>
</ScrollViewer>
我添加了一堆按钮来测试整个事情。任何帮助都非常感谢。谢谢。
答案 0 :(得分:2)
从StackPanel中删除Height
属性。您正在强制内部StackPanel截断其内容。由于内部StackPanel比ScrollViewer(118)小(97),因此ScrollViewer无需滚动。 ScrollViewer 期望其内容大于ScrollViewer本身。
答案 1 :(得分:0)
我所做的是在包含堆栈面板的网格上侦听SizeChangedEvent,然后相应地调整ScrollViewer的高度。在这里,例如我只是将其设置为屏幕尺寸的一半。它并不完美,但它确实有效。
private void ContentPanel_SizeChanged(object sender, SizeChangedEventArgs e)
{
// Resize the scroll view if the stackpanel is bigger, additional 70 for app bar
if (e.NewSize.Height >
(System.Windows.Application.Current.Host.Content.ActualHeight - 70))
{
ContentScrollViewer.VerticalScrollBarVisibility = ScrollBarVisibility.Visible;
ContentScrollViewer.Height = System.Windows.Application.Current.Host.Content.ActualHeight / 2;
}
}