2012-10-17 17 views
7

Tôi đã xác định hai trạng thái sau đây trong Expression Blend. Tôi đã cố gắng để làm theo hướng dẫn this nhưng tôi cảm thấy như nó để lại cho tôi treo khi tôi cần thông tin về cách thức và thời điểm thay đổi trạng thái.Làm thế nào để thay đổi VisualState trong WP7

enter image description here

Theo hướng dẫn tôi đính kèm một hành vi (tôi giả sử "GotoState") để UserControl tôi - Đáng tiếc là tôi không nghĩ rằng tôi thực sự có một User Control - và ngay cả khi tôi đã làm, tôi phải chứ phải đính kèm một hành vi cho cả hai số PortraitStateLandscapeState của tôi?

Có vẻ như tôi có thể đính kèm GotoState vào phần tử LayoutRoot của tôi. Vì vậy, tôi có đính kèm hành vi của tôi với điều đó trong cả hai tiểu bang? Mọi sự trợ giúp sẽ rất được trân trọng.

* chỉnh sửa: Tôi đã chơi xung quanh trong tệp xaml.cs của mình và đã tìm ra rằng đây có thể là cách để làm điều đó theo chương trình. khi gỡ lỗi và thay đổi hướng tôi nhập trường hợp chuyển đổi của mình và tìm hướng chính xác. Nhà nước, tuy nhiên, không bao giờ được chuyển. Tôi đang làm gì sai?

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: Khi cố gắng trên Dường như GotoElementState trả về false và, theo MSDN: "trả về true nếu kiểm soát chuyển thành công sang trạng thái mới, nếu không, false"

Bây giờ tôi còn lại với câu hỏi: Điều gì có thể khiến quá trình chuyển đổi trạng thái của tôi thất bại?

Trả lời

1

tôi quản lý để tìm một giải pháp cho vấn đề của riêng tôi bằng cách làm như sau.

Nó chỉ ra rằng bằng cách sử dụng ExtendedVisualStateManager.GotoElementState (UIElement, String, bool) không hoạt động tốt tại thời điểm này vì vậy tôi đã buộc phải tìm một cách để sử dụng VisualStateManager.GotoState.

tôi giải quyết vấn đề của tôi bằng cách đơn giản gói LayoutRoot của tôi trong một UserControl như vậy:

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

bang Switching bây giờ chỉ đơn giản là một câu hỏi gọi VisualStateManager.GotoState như tôi ban đầu đã cố gắng để làm.

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

thay đổi các VisualState trong WP7 như thế này:

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

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

      break; 

     case PageOrientation.Portrait: 

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

      break; 

     default: 

      break; 
    }