在UWP中更改大小触发器中控件的父级

时间:2015-12-06 14:15:02

标签: c# windows-10 uwp windows-10-universal

我正在创建一个Windows 10 Universal应用程序,我的主页面中有两个面板。

在平板电脑/桌面模式下,两者都可以同时显示(只有两个简单的Grid,一个填充左侧,另一个填充右侧)

但是,在手机模式下,有一个转轴,用户可以在面板之间滑动。

(我可以使用SplitView和汉堡菜单,它们可以在平板电脑/台式机和手机模式下轻松工作,但在我的情况下,枢轴更有意义)

所以,我目前所做的是,每个面板有两个实例。 PhonePanel1PhonePanel2是我的数据透视控件的两页内的两个网格,TabletPanel1TabletPanel2是两个可以并排显示的网格。我使用AdaptiveTrigger来检测页面宽度并在这两种视图方法之间切换。

但是,每个面板有两个实例并不是一个好方法,因为它们显示的内容基本相同。

有没有更好的方法来做到这一点?当触发器改变视图模式时,可能更改Grid的父级?还是更好的东西?

3 个答案:

答案 0 :(得分:1)

更改我能想到的父级的唯一方法是在后面编写一些代码,将它们呈现在新位置。一个合适的解决方案可能是推迟控制装置的加载,直到需要它们为止。

x:DeferLoadStrategy=”Lazy“

如果将此属性添加到重复的控件中,则只会在需要时加载它们。因此,在手机上不应加载PC /平板电脑视图,除非用户在外部显示器上运行Continuum。

在PC上,您最终可能都会加载(如果用户调整窗口大小) - 在PC上通常会有更多资源,因此在大多数情况下,出现问题。< / p>

我研究了将控件转移到另一个父级的方法背后的代码,我认为现在这样做还为时过早,甚至可能无法提高性能。

我已经选择了Defer Load Strategy属性,发现性能很好,而且只需要很少的代码。我的重复控件共享相同的ViewModel,所以我只是添加了属性以确保资源仅在必要时使用。

答案 1 :(得分:0)

你的方法没有错。要减少内存使用量,例如在手机上发生自适应触发时,请将TabletPanel1和TabletPanel2可见性设置为折叠。

如果所有面板都使用相同的datacontext,则保持原样,如果没有将折叠控件的datacontext设置为null。

答案 2 :(得分:-2)

您可以将每个面板创建为用户控件,然后您只需要定义一次内容,但每个控件都可以包含在您想要的每个布局中。

相关问题