我在Expression Blend中定义了以下两种状态。我一直在努力关注this指南,但当我需要有关如何以及何时改变状态的信息时,我觉得这让我感到不知所措。
根据指南,我要将行为(我假设为“GotoState”)附加到我的UserControl
- 不幸的是我认为我实际上没有User Control
- 即使我这样做了,我是否必须将行为附加到我的PortraitState
和LandscapeState
?
我似乎可以将GotoState
附加到我的LayoutRoot
元素。那么我是否将这种行为与两种状态中的行为联系起来?任何帮助将不胜感激。
*编辑:我正在我的xaml.cs文件中玩,并认为这可能是以编程方式执行此操作的方法。调试和更改方向时,我进入开关盒并找到正确的方向。然而,国家从未切换过。我做错了什么?
protected override void OnOrientationChanged(OrientationChangedEventArgs e)
{
switch (e.Orientation)
{
case PageOrientation.Landscape:
ExtendedVisualStateManager.GoToElementState(root:this.LayoutRoot, stateName: "LandscapeState", useTransitions: true);
break;
case PageOrientation.LandscapeRight:
ExtendedVisualStateManager.GoToElementState(root:this.LayoutRoot, stateName: "LandscapeState", useTransitions: true);
break;
case PageOrientation.LandscapeLeft:
ExtendedVisualStateManager.GoToElementState(root:LayoutRoot, stateName: "LandscapeState", useTransitions: true);
break;
case PageOrientation.Portrait:
ExtendedVisualStateManager.GoToElementState(root:this.LayoutRoot, stateName: "PortraitState", useTransitions: true);
break;
case PageOrientation.PortraitUp:
ExtendedVisualStateManager.GoToElementState(root:this.LayoutRoot, stateName: "PortraitState", useTransitions: true);
break;
case PageOrientation.PortraitDown:
ExtendedVisualStateManager.GoToElementState(root:this.LayoutRoot, stateName: "PortraitState", useTransitions: true);
break;
default:
break;
}
}
edit2:尝试上述时看起来GotoElementState返回false,并且根据MSDN:“如果控件成功转换到新状态,则返回true;否则返回false。”
现在我留下了一个问题:什么可能导致我的状态转换失败?
答案 0 :(得分:1)
更改WP7中的VisualState,如下所示:
的
的 switch (e.Orientation)
{
case PageOrientation.Landscape:
VisualStateManager.GoToState(this, "LandscapeState", true);
break;
case PageOrientation.Portrait:
VisualStateManager.GoToElementState(this,"PortraitState", true);
break;
default:
break;
}
的
答案 1 :(得分:1)
通过执行以下操作,我设法找到了解决我自己问题的方法。
事实证明,使用ExtendedVisualStateManager.GotoElementState(UIElement,String,bool)目前效果不佳,所以我不得不找到一种方法来使用VisualStateManager.GotoState。
我通过简单地将LayoutRoot包装在UserControl中解决了我的问题:
<UserControl x:Name="userControl">
<Grid x:Name="LayoutRoot" Background="Transparent">
<VisualStateManager.VisualStateGroups>
...
</UserControl>
切换状态现在只是我最初尝试调用VisualStateManager.GotoState的问题。
protected override void OnOrientationChanged(OrientationChangedEventArgs e)
{
base.OnOrientationChanged(e);
switch (e.Orientation)
{
case PageOrientation.Landscape:
case PageOrientation.LandscapeRight:
case PageOrientation.LandscapeLeft:
VisualStateManager.GoToState(control: userControl,
stateName: "LandscapeState",
useTransitions: true);
break;
case PageOrientation.Portrait:
case PageOrientation.PortraitUp:
case PageOrientation.PortraitDown:
VisualStateManager.GoToState(control: userControl,
stateName: "PortraitState",
useTransitions: true);
break;
default:
VisualStateManager.GoToState(control: userControl,
stateName: "PortraitState",
useTransitions: true);
break;
}
}