0

我在 Metro 应用程序的全屏视图中StackPanel包含三个红色Grid元素。

前:
全屏

当应用程序更改为捕捉状态时,动态修改Style所有子节点的正确方法是什么,以便将它们设置为蓝色并将它们设置为 N 像素?GridBackgroundHeight

后:
抢购

4

1 回答 1

2

在 WinRT XAML 中,虽然您可以在运行时更改样式,但更改不会传播到具有该样式的现有元素。您可以更改分配给元素的样式,但不能更改样式。所以,你可以清除/重置一个样式,它会改变元素,但你不能改变样式,不幸的是它会自动调整。

如果网格不是太多,最简单的方法是从 LayoutAwarePage(VS/Blend Metro 模板的一部分)开始,并在分配给 ApplicationViewStates 的 VisualStates 中,根据您的需要调整每个网格。您可以应用新的样式或尺寸,或任何您想要的。这很简单。

或者,您还可以创建一个定义了各种状态的资源,并且在您的网格所在的页面中,您应该能够将 Loaded 事件连接到基类 (LayoutAwarePage) 中的公共 StartLayoutUpdates 方法:

这样,您将拥有这样的状态。然而,这些需要在网格上定义——这可能很混乱(而且不切实际)。此时最好切换到包含网格实例并在其中应用状态的模板化控件(或用户控件)。

<VisualStateGroup x:Name="ApplicationViewStates">
    <VisualState x:Name="FullScreenLandscape"/>
    <VisualState x:Name="Filled"/>
    <VisualState x:Name="FullScreenPortrait" />
    <!-- etc ...->
</VisualStateGroup>

或者,您可以创建一个控件并手动连接窗口大小调整/布局事件并执行相同的工作。它基本上是一样的(只是取决于你是否想把逻辑放在哪里)。

于 2012-09-11T01:40:39.827 回答