可以为纵向和横向指定两种不同的布局吗?

时间:2012-04-05 00:29:43

标签: c# windows-8 microsoft-metro

我在Win8 Metro风格的应用程序中看到的C#示例和源代码使用故事板动画来修改不同视图的页面(不仅仅是不同的全屏方向,而是 snapped 填充视图模式)。

这似乎是调整不同分辨率,方向等视图的好方法,但是......

我有时会获得肖像和UI的UI规格。需要<Grid><StackPanel>标记的内部结构非常不同的横向视图。尝试使用动画将其中一个结构变形为另一个结构似乎是一项非常艰巨的任务,更不用说随着规范的成熟而难以维护。

在我辞职以采用动画单一布局方法之前,我想确保 可以简单地指定两个完全独立XAML布局,类似于Android中的工作方式?

有人知道吗?

感谢。

1 个答案:

答案 0 :(得分:3)

唯一的缺点是你有一个大的重复XAML,就像你已经为Landscape / Filled和Snapped做的那样。

但是,您可以执行的操作是在Landscape布局上设置一些特定属性的动画,如果它可以让您到达您需要的位置。

例如,如果有一个GridView并且你的盒子需要从250x250到200x300,你可以复制你用于ItemTemplate的样式,调整它以便宽度和高度值是正确的,并使用StoryboardItemTemplate"Standard250x250"更改为"MyNewPortrait200x300Style"

现在,如果它是一个根本性的变化,例如GridViewListView之间的差异,您可能只需要使用一些重复的布局代码并使用一些Storyboard s折叠一个并显示另一个(如模板使用横向/填充与捕捉)。

修改

要说清楚,我说你最好的选择是通过动画调整样式属性,或创建一个完全独立的Panel(无论是GridStackPanel,还是对于您的其他布局而言,并使用动画将Landscape 1上的Visibility设置为Collapsed,将Portrait one设置为Visible。这就是网格模板处理Snapped的方式,它的工作原理非常好。比试图改变根面板的每个子控制要容易得多。