2012-10-17 16 views
7

Expression Blendで次の2つの状態を定義しました。私はthisガイドに従うことを試みてきましたが、いつどのように状態を変えるかについての情報が必要なときに私がぶら下がっているように感じます。WP7でVisualStateを変更するには

enter image description here

私はUserControlに(私は「GotoState」を想定する)行動を添付していますガイドによると - 残念ながら、私は私が実際にUser Controlを持っていないと思う - と私はやっていても、私は希望PortraitStateと私のLandscapeStateの両方にビヘイビアを付ける必要がありますか?

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」

ここで、私の状態遷移が失敗する原因は何ですか?

答えて

1

は、私は次の作業を実行して、自分自身の問題への解決策を見つけることができました。

ExtendedVisualStateManager.GotoElementState(UIElement、String、bool)を使用すると、現時点ではあまりうまく機能しないため、VisualStateManager.GotoStateを使用する方法を見つけることが余儀なくされました。

私は単にのようなユーザーコントロールで私のLayoutRootをラップすることにより、私の問題を解決:私が最初に行うことを試みたとして、状態を切り替え

<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; 
     } 
    } 
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; 
    } 

関連する問題