2

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

在平板/桌面模式下,两者同时可见(只有两个简单Grid的 s,一个填充左侧,另一个填充右侧)

但是,在电话模式下,有一个枢轴,用户可以在面板之间滑动。

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

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

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

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

4

3 回答 3

1

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

x:DeferLoadStrategy=”Lazy“

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

在 PC 上,您可能仍然会同时加载两者(如果用户调整窗口大小) - 在 PC 上通常有更多资源,因此在大多数情况下问题不大

我研究了将控件移动到不同父级的方法背后的代码,老实说,当它甚至可能无法提高性能时,我认为这样做还为时过早。

我已经使用了延迟加载策略属性,发现性能很好,并且只需要很少的代码。我的重复控件共享相同的 ViewModel,所以我几乎只是添加了该属性以确保仅在必要时使用资源。

于 2016-12-15T22:58:21.787 回答
0

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

如果所有面板都使用相同的数据上下文,则保持原样,如果没有将折叠控件的数据上下文设置为空。

于 2015-12-07T11:17:23.467 回答
-2

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

于 2015-12-07T12:06:12.333 回答