2012-05-09 10 views
3

METROアプリでのDataTemplateでGoToStateを使用します。どのように私はDataTamplateを持っている私のPage.Resourcesで

<DataTemplate x:Key="gridviewQuestStyle"> 
     <Button Content="{Binding QuestNumb}" Style="{StaticResource buttonQuestStyle}"> 
      <VisualStateManager.VisualStateGroups> 
       <VisualStateGroup x:Name="questionStates">       
        <VisualState x:Name="Right"> 
         <Storyboard> 
          <ColorAnimation Storyboard.TargetName="BackgroundBrush" Storyboard.TargetProperty="Color" To="LightGreen" /> 
         </Storyboard> 
        </VisualState> 
        <VisualState x:Name="Wrong"> 
         <Storyboard> 
          <ColorAnimation Storyboard.TargetName="BackgroundBrush" Storyboard.TargetProperty="Color" To="Red" /> 
         </Storyboard> 
        </VisualState> 
       </VisualStateGroup> 
      </VisualStateManager.VisualStateGroups> 

      <Button.Background> 
       <SolidColorBrush x:Name="BackgroundBrush" Color="Black"/> 
      </Button.Background> 
     </Button> 
    </DataTemplate> 

その後、私はGridViewコントロールを作成します。

<GridView Grid.Row="0" x:Name="GridView_ButtonsQuest" 
    ItemTemplate="{StaticResource gridviewQuestStyle}" 
    ItemsSource="{Binding Questions}" > 
</GridView> 

質問一覧です:

public class Question 
{ 
    public string QuestNumb { get; set; } 
    public string QuestText { get; set; } 
} 

私のアプリケーションのロジックは:

if(isAnswerRight) 
{ 
    VisualStateManager.GoToState(???, "Right", false); 
} 
else 
{ 
    VisualStateManager.GoToState(???, "Wrong", false); 
} 

GoToStateメソッドの最初のパラメータに必要なものを説明してください。

答えて

1

VisualStateスイッチがページまたはUserControl(MVVMビューモデルではない)の.csファイルで発生する場合。グリッドビューに名前プロパティを適用します。

<GridView Grid.Row="0" x:Name="GridView_ButtonsQuest" 
    ItemTemplate="{StaticResource gridviewQuestStyle}" 
    ItemsSource="{Binding Questions}" 
    x:Name="myStateChanges" > 
</GridView> 

次に、GoToState()メソッドに貼り付けます。

if(isAnswerRight) 
{ 
    VisualStateManager.GoToState(this.myStateChanges, "Right", false); 
} 
else 
{ 
    VisualStateManager.GoToState(this.myStateChanges, "Wrong", false); 
} 
1

Listviewで同じ問題が発生していました。私がコントロールがに包まれているどのように多くの層を見つけるためにxmalspy使用

foreach (var item in GridView_ButtonsQuest.Items) 
{ 
    var gridItem = (GridViewItem)MyList.ItemContainerGenerator.ContainerFromItem(item); 
    var wrap1 =VisualTreeHelper.GetChild(gridItem , 0); 
    var wrap2 = VisualTreeHelper.GetChild(wrap1 , 0); 
    ... 

いるItemContainerGeneratorを使用して、テンプレート内のコントロールを取得することが可能であるとVisualTreeHelper

。この再帰的な処理を行い、何かを構築することが可能なはずです。

次の問題は、グリッドまたはボタンでGoToStateを使用できないことです。しかし、誰かが(...)それはあなたがExtendedVisualStateManager.GoToElementStateを書くことができ、その後

http://social.msdn.microsoft.com/Forums/en-GB/winappswithcsharp/thread/24dc19ff-15ed-4170-b3c3-d313728b642bを参照してくださいサポートExtendedVisualStateManagerをdevlopために時間を取っていた

関連する問題