2012-10-17 13 views
7

Zdefiniowałem następujące dwa stany w Wyrażenie mieszania. Próbowałem postępować zgodnie z przewodnikiem this, ale mam wrażenie, że pozostawia mnie w zawieszeniu, gdy potrzebuję informacji o tym, jak i kiedy zmienić stan.Jak zmienić VisualState w WP7

enter image description here

Według instrukcji mam dołączyć zachowanie (zakładam "GotoState") do mojego UserControl - Niestety nie sądzę I rzeczywiście mają User Control - a nawet gdybym to zrobił, byłbym muszę dołączyć zachowanie zarówno do mojego PortraitState i mojego LandscapeState?

Wygląda na to, że mogę dołączyć element GotoState do mojego elementu LayoutRoot. Więc czy przywiązuję moje zachowanie do tego w obu stanach? Każda pomoc będzie bardzo ceniona.

* edit: Grałem w moim pliku xaml.cs i stwierdziłem, że może to być sposób na programowanie. podczas debugowania i zmiany orientacji wchodzę do obudowy przełącznika i znajduję właściwą orientację. Stan jednak nigdy się nie zmienia. Co ja robię źle?

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: Przy próbie powyższym wydaje się, że GotoElementState zwraca false i zgodnie z MSDN: „Zwraca true, jeśli kontrola powodzeniem przeniesione do nowego stanu, w przeciwnym razie false”

Teraz pozostaje mi pytanie: co może spowodować, że moje przejście na stan się nie powiedzie?

Odpowiedz

1

udało mi się znaleźć rozwiązanie do mojego problemu, wykonując następujące czynności.

Okazuje się, że za pomocą ExtendedVisualStateManager.GotoElementState (UIElement, String, bool) nie działa bardzo dobrze w tej chwili, więc został zmuszony do znalezienia sposobu użycia VisualStateManager.GotoState.

mi rozwiązać mój problem, po prostu owijania moją LayoutRoot w UserControl jako takie:

<UserControl x:Name="userControl"> 
    <Grid x:Name="LayoutRoot" Background="Transparent"> 
     <VisualStateManager.VisualStateGroups> 
    ... 
</UserControl> 

stany przełączania był teraz po prostu kwestia nazywając VisualStateManager.GotoState jak początkowo próbował zrobić.

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

Zmiana VisualState w WP7 tak:

switch (e.Orientation) 
    { 
     case PageOrientation.Landscape: 

      VisualStateManager.GoToState(this, "LandscapeState", true); 

      break; 

     case PageOrientation.Portrait: 

      VisualStateManager.GoToElementState(this,"PortraitState", true); 

      break; 

     default: 

      break; 
    }