Expression Blend で次の 2 つの状態を定義しました。このガイドに従おうとしてきましたが、状態をいつ、どのように変更するかについての情報が必要なときに、ハングアップしたままになっているように感じます。
ガイドによると、私はビヘイビアー(「GotoState」と仮定します)を私のものにアタッチすることUserControl
になっています-残念ながら、実際に持っているとは思いませんUser Control
-そして、たとえ持っていたとしても、私PortraitState
と私の両方にビヘイビアーをアタッチする必要がありLandscapeState
ますか?
要素に aGotoState
を付けることができるようです。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 を返します。」
今、私は質問を残しています:状態遷移が失敗する原因は何ですか?