WP7

2012-10-17 14 views
7

'da VisualState'ı nasıl değiştiririm Şu iki durumu Expression Blend'de tanımladım. this rehberini takip etmeye çalışıyorum ama durumun nasıl ve ne zaman değiştirileceğine dair bilgiye ihtiyacım olduğunda beni askıda bırakıyor gibi hissediyorum.WP7

enter image description here

Ben bir davranışı eklemek duyuyorum kılavuzuna göre benim UserControl (I "GotoState" varsayalım) - ve yaptım bile, isterim - Ne yazık ki aslında bir User Control sanmıyorum PortraitState ve LandscapeState'um için bir davranış eklemek zorunda mıyım?

LayoutRoot öğem için GotoState ekleyebiliyorum gibi görünüyor. Davranışlarımı her iki eyalette de mi ekledim? Herhangi bir yardım büyük takdir edilecektir.

* edit: Benim xaml.cs dosyasında oynuyordum ve bunun program aracılığıyla yapmanın bir yolu olabileceğini düşündüm. yönlendirme ve yönlendirme değiştirirken anahtar durumumu giriyorum ve doğru yönü buluyorum. Bununla birlikte, devlet asla değişmez. Neyi yanlış yapıyorum?

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: It yukarıda GotoElementState false döndürür görünüyor teşebbüs ve MSDN göre ki: "Kontrol başarıyla yeni duruma geçiş true döndürür, aksi takdirde false"

Şimdi, şu soruyla uğraştım: Durum geçişimin başarısız olmasına ne sebep olabilir?

cevap

1

ben aşağıdakileri yaparak kendi soruna çözüm bulmayı başardılar.

VisualStateManager.GotoState'i kullanmanın bir yolunu bulmaya zorlandığım için, ExtendedVisualStateManager.GotoElementState (UIElement, String, bool) işlevinin şu anda çok iyi çalışmadığı ortaya çıkıyor.

Sadece gibi bir UserControl benim LayoutRoot sararak benim sorun çözüldü: Başlangıçta yapmaya çalıştığı gibi

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

Switching devletler artık VisualStateManager.GotoState çağıran basit bir soru oldu.

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

değişim böyle WP7 içinde VisualState:

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

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

      break; 

     case PageOrientation.Portrait: 

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

      break; 

     default: 

      break; 
    }