Cod*_*ate 7 c# visualstatemanager windows-phone-7
我在Expression Blend中定义了以下两种状态.我一直在努力遵循这个指南,但是当我需要有关如何以及何时改变状态的信息时,我觉得这让我感到不知所措.
根据指南,我要附加一个行为(我假设"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;
}
}
Run Code Online (Sandbox Code Playgroud)
edit2:当尝试上述时GotoElementState似乎返回false,并且根据MSDN:"如果控件成功转换到新状态,则返回true;否则返回false."
现在我留下了一个问题:什么可能导致我的状态转换失败?
我通过执行以下操作设法找到了解决我自己问题的方法。
事实证明,使用 ExtendedVisualStateManager.GotoElementState(UIElement, String, bool) 目前效果不太好,所以我被迫寻找一种使用 VisualStateManager.GotoState 的方法。
我通过简单地将 LayoutRoot 包装在 UserControl 中解决了我的问题:
<UserControl x:Name="userControl">
<Grid x:Name="LayoutRoot" Background="Transparent">
<VisualStateManager.VisualStateGroups>
...
</UserControl>
Run Code Online (Sandbox Code Playgroud)
切换状态现在只是调用 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;
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
733 次 |
最近记录: |