2014-12-04 60 views
1

當屏幕方向改變我稱之爲:VisualStateManager GotoState函數不起作用

 string CurrentViewState = ApplicationView.GetForCurrentView().Orientation.ToString(); 

     // Trigger the Visual State Manager 
     bool success = VisualStateManager.GoToState(this, CurrentViewState, true); 

在我的XAML中有一個簡單的網格(深在頁面的層次)

  <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}" Grid.Row="2"> 

       <Grid.ColumnDefinitions> 
        <ColumnDefinition></ColumnDefinition> 
        <ColumnDefinition></ColumnDefinition> 
        <ColumnDefinition></ColumnDefinition> 
       </Grid.ColumnDefinitions> 

       <Rectangle x:Name="rect_1" Grid.Column="0" Fill="Blue"></Rectangle> 
       <Rectangle x:Name="rect_2" Grid.Column="1" Fill="Red"></Rectangle> 
       <Rectangle x:Name="rect_3" Grid.Column="2" Fill="Green"></Rectangle> 

       <VisualStateManager.VisualStateGroups> 
        <VisualStateGroup> 
         <VisualState x:Name="Landscape"> 
          <Storyboard> 
           <ObjectAnimationUsingKeyFrames 
     Storyboard.TargetName="rect_1" 
     Storyboard.TargetProperty="Fill"> 
            <DiscreteObjectKeyFrame KeyTime="0" Value="Brown"/> 
           </ObjectAnimationUsingKeyFrames> 
          </Storyboard> 

         </VisualState> 

         <VisualState x:Name="Portrait"> 
          <Storyboard> 
           <ObjectAnimationUsingKeyFrames 
     Storyboard.TargetName="rect_1" 
     Storyboard.TargetProperty="Fill"> 
            <DiscreteObjectKeyFrame KeyTime="0" Value="Orange"/> 
           </ObjectAnimationUsingKeyFrames> 
          </Storyboard> 
         </VisualState> 
        </VisualStateGroup> 
       </VisualStateManager.VisualStateGroups> 

      </Grid> 

所以這是3簡單的矩形,但它們的顏色永遠不會改變。所有這些都是從這裏的教程中直接獲取的:http://msdn.microsoft.com/en-us/library/windows/apps/dn495655.aspx唯一的區別是我的網格不是頁面的頂層元素。 該問題可能是的

VisualStateManager.GoToState(this, CurrentViewState, true); 

的第一個參數是「本」。但我不知道它應該是什麼,將它設置到網格或其中一個矩形是不允許的。

 IList<VisualStateGroup> visualStateGroups = VisualStateManager.GetVisualStateGroups(this); 
     int count= visualStateGroups.Count;  

數爲0

+0

將您的VSM移動到您嘗試使用的元素上方,又名...將它移動到您的矩形之上,甚至可以高於您的列定義,就像它在tut中顯示的那樣。哦,並將「CurrentViewState」更改爲您正在切換的視覺狀態名稱... – 2014-12-04 20:54:46

+0

不幸的是, – SPQR3 2014-12-04 20:58:32

+0

您將currentviewstate更改爲喜歡縱向,但它沒有?猜猜我必須在一分鐘內真正閱讀你的整個事情。 – 2014-12-04 20:59:18

回答

6

我發現:VisualStateManager必須是頁面的直接孩子的直接孩子。

<Page> 
    <Grid> 
     <VisualStateManager...> 
     </VisualStateManager...> 

     <!-- deep in the hierarchy somewhere --> 
        <Grid> 
          <Rectangle/> 
          <Rectangle/> 
          <Rectangle/> 
        </Grid> 
    </Grid> 
</Page> 

我試着將它作爲Page的直接子項添加,但沒有工作。我根本不明白這背後的邏輯是什麼。

+0

非常感謝,我可以在此浪費時間! – 2016-04-10 16:50:01