我的布局包含红色面板和右侧面板中的一些控件,两者都包含带有一些项目的列表视图,因此可以自行滚动,如图片顶部所示。
我想在窄屏幕上更改布局(当用户调整我的应用程序大小时),因为同一方向的两个面板都不适合。我想知道实现这一目标的好方法。
到目前为止,我已经尝试创建一个最初包含红色和蓝色面板的网格,当窗口大小发生变化时,我将属性Grid.Column从“1”设置为0,将Grid.Row从0设置为1蓝色面板。然而,虽然这确实将蓝色面板置于红色面板之下,但我不知道如何使整个布局可滚动,因为部分蓝色布局现在将在屏幕外。
我想也许我可以通过在StackPanel中放置两个面板并只改变它的方向来实现我的计划,但是我不确定如何在宽广的布局中为其子节点均匀地分割StackPanel(并且滚动问题仍然存在这里)。
或者我应该准备两个单独的布局并使用VisualStateManager在它们之间切换?
答案 0 :(得分:2)
“只需准备两个单独的布局,然后使用VisualStateManager
”
基本上为所有支持的窗口大小创建布局,并将它们全部放在包含Visibility="Collapsed"
的页面中。然后处理SizeChanged
事件并使用VSM切换到适合新大小的状态。您可以在Blend中轻松定义和查看不同的视觉状态。如果您不打算使用Blend - 您可以跳过VSM并在事件处理程序中手动设置每个布局面板的Visibility
。
还有其他一些选项,例如动态重新配置不同的方向和ScrollViewer
模式,甚至实现自己的布局面板,但我不会尝试过早优化,在大多数情况下,VSM路径运行良好。