2012-10-17 17 views
7

Ich habe die folgenden zwei Zustände in Expression Blend definiert. Ich habe versucht, this Leitfaden zu folgen, aber ich fühle mich wie es mich hängen lässt, wenn ich Informationen darüber brauche, wie und wann ich den Zustand ändern soll.Wie ändere ich den VisualState in WP7

enter image description here

Nach der Führung Ich bin ein Verhalten zu befestigen (ich nehme an „GoToState“), um meine UserControl - leider tatsächlich habe ich glaube ich nicht ein User Control - und selbst wenn ich, tat würde ich muss ein Verhalten sowohl an meine PortraitState als auch an meine LandscapeState anhängen?

Es scheint, ich kann ein GotoState an meine LayoutRoot Element anhängen. Also verbinde ich mein Verhalten damit in beiden Staaten? Jede Hilfe würde sehr geschätzt werden.

* bearbeiten: Ich spielte in meiner XAML.CS-Datei herum und dachte mir, dass dies programmatisch der Weg sein könnte. Beim Debuggen und Ändern der Orientierung gebe ich meinen Schalterkasten ein und finde die richtige Orientierung. Der Zustand wird jedoch nie umgeschaltet. Was mache ich falsch?

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: Wenn die oben Es Versuch scheint, dass GotoElementState false zurück und nach MSDN: „true zurückgibt, wenn die Steuerung erfolgreich auf den neuen Zustand über, andernfalls false“

Jetzt bin ich mit der Frage: Was kann meinen Zustand Übergang zum Scheitern bringen?

Antwort

1

schaffte ich es, indem Sie die folgende, eine Lösung für mein eigenes Problem zu finden.

Es stellt sich heraus, dass die Verwendung von ExtendedVisualStateManager.GotoElementState (UIElement, String, bool) im Moment nicht sehr gut funktioniert, so dass ich gezwungen war, einen Weg zu finden, VisualStateManager.GotoState zu verwenden.

löste ich mein Problem einfach durch meine LayoutRoot in einem Usercontrol als solche Verpackung:

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

Schaltzustände waren jetzt nur eine Frage VisualStateManager.GotoState zu nennen, wie ich zunächst zu tun versucht.

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

Änderung der Visual in WP7 wie folgt aus:

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

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

      break; 

     case PageOrientation.Portrait: 

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

      break; 

     default: 

      break; 
    } 

Verwandte Themen