我在 Metro 应用程序的全屏视图中StackPanel
包含三个红色Grid
元素。
前:
当应用程序更改为捕捉状态时,动态修改Style
所有子节点的正确方法是什么,以便将它们设置为蓝色并将它们设置为 N 像素?Grid
Background
Height
后:
我在 Metro 应用程序的全屏视图中StackPanel
包含三个红色Grid
元素。
前:
当应用程序更改为捕捉状态时,动态修改Style
所有子节点的正确方法是什么,以便将它们设置为蓝色并将它们设置为 N 像素?Grid
Background
Height
后:
在 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>
或者,您可以创建一个控件并手动连接窗口大小调整/布局事件并执行相同的工作。它基本上是一样的(只是取决于你是否想把逻辑放在哪里)。