我在 Expression Blend 中定义了以下两种状态。我一直在尝试遵循本指南,但当我需要有关如何以及何时更改状态的信息时,我觉得它让我束手无策。
根据指南,我要将行为(我假设“GotoState”)附加到我的UserControl
- 不幸的是我认为我实际上没有User Control
- 即使我这样做了,我是否必须将行为附加到 myPortraitState
和 my LandscapeState
?
看来我可以将 a 附加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;
}
}
编辑2:尝试上述操作时,似乎 GotoElementState 返回 false,并且根据 MSDN:“如果控件成功转换到新状态,则返回 true;否则返回 false。”
现在我有一个问题:什么会导致我的状态转换失败?