Windows 8 在Windows应用商店应用程序中的代码隐藏中转到网格内的可视状态
我的xaml代码如下所示-Windows 8 在Windows应用商店应用程序中的代码隐藏中转到网格内的可视状态,windows-8,windows-runtime,windows-store-apps,winrt-xaml,windows-8.1,Windows 8,Windows Runtime,Windows Store Apps,Winrt Xaml,Windows 8.1,我的xaml代码如下所示- <Grid x:Name="LayoutRoot"> <VisualStateManager.VisualStateGroups> <VisualStateGroup x:Name="CommonStates"> <VisualStateManager.CustomVisualStateManager> <common:ExtendedVisualStateManager />
<Grid x:Name="LayoutRoot">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualStateManager.CustomVisualStateManager>
<common:ExtendedVisualStateManager />
</VisualStateManager.CustomVisualStateManager>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup .../>
</VisualStateManager.VisualStateGroups>
但它总是返回null
有什么解决方法吗?通常,我的控件中有一个
UpdateVisualState(bool-usetransforts)
方法,用于执行所有GoToVisualState()
调用。如果某些东西无法设置动画,我会看到两个选项:
UpdateVisualState()方法中更改代码隐藏。此解决方案的缺点是,Blend不会在可视状态编辑器中显示更改。我个人并不在意,因为我很少在已经集成的设计上使用Blend,而且这个解决方案很简单
情节提要中设置该属性的动画。这是一个多一点的工作,但可以在您的项目中保持混合支持
<Grid x:Name="LayoutRoot">
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="CommonStates">
<VisualStateManager.CustomVisualStateManager>
<common:ExtendedVisualStateManager />
</VisualStateManager.CustomVisualStateManager>
<VisualStateManager.VisualStateGroups>
<VisualStateGroup .../>
</VisualStateManager.VisualStateGroups>
我想这个解决方案的好处在于,您仍然可以在Blend的状态选项卡中看到视觉状态,对于Blend爱好者来说,这很酷。如果包含视觉状态的元素是
控件的类型,则第一种方法可以工作;如果它是网格
或不是从控件继承的东西
,则需要使用ExtendedVisualStateManager
或类似工具。第二种方法可行,但会丢失视觉状态之间的所有转换。实际上,如果使用这两种方法中的任何一种-基本上是在编写代码,因此可以在其中执行任何操作-运行故事板动画、每帧动画,甚至为不可设置动画的属性设置动画,如Grid.ColumnDefinitions
等。是的,任何事情都可以通过代码来完成,但在这种情况下,这两种解决方案并不理想,因为您最终会编写大量额外的代码,这些代码可以在VisualStatesManager中自动生成。例如,您永远不需要编写故事板,就可以从特定状态返回到正常状态VisualStateManager
为您做到了这一点。我并没有说不要使用VSM,我的意思是您可以同时使用这两者,尽管CustomVisualStateManager
听起来确实是最好的解决方案。这在WinRT上对我不起作用。我复制了扩展的vsm,并根据答案更新了XAML。但是,没有更新发生。具体来说,我使用的是网格控件。我使用以下调用:ExtendedVisualStateManager.GoToElementState(网格,“InitializedState”,useTransforms:true);