2

OnAttachedのカスタム動作と、その動作のAssociatedObject.Loadedイベントに追加されたイベントハンドラのオーバーライドでVisualStateManager.GetVisualStateGroupsを使用しようとしました。両方の時間私は空のリストを取得します。Silverlight:VisualStateManager.GetVisualStateGroupsはありません。どうすれば入手できますか?

コントロールに定義されたビジュアル状態グループを取得する別の方法がありますか、または別のイベントハンドラを添付する必要がありますか?

コントロールはVisualStateGroupsVisualStatesです。

答えて

3

通常、VisualStateGroups添付プロパティは、コントロールのControlTemplateのトップレベルFrameworkElementに添付されています。したがって、この値を取得するには、VisualTreeHelperを使用してコントロールの最初の子を取得し、それにVisualStateGroupsプロパティがあるかどうかを確認する必要があります。

+0

私は、私が働いていたコードと異なる道を行きましたが、ビジュアルステートグループは、ユーザーコントロールのルートに定義されている場合、私は、思っていた、コントロールの.xamlファイルにはそのマークアップではありませんテンプレート? –

+0

私はこのアプローチを試みましたが、返された子はグリッドであり、ビジュアルステートは実際にそれに関連付けられていますが、VisualStateManager.GoToStateはコントロールのみを受け入れ、グリッドはコントロールではありません。状態を設定することはできません。 – Murven

4

アンソニーの答えに基づいています。 ここでは、Metro Appの例を挙げます。

public VisualState GetCurrentState(string stateGroupName) 
{ 
    VisualStateGroup stateGroup1 = null; 

    IList<VisualStateGroup> list = VisualStateManager.GetVisualStateGroups(VisualTreeHelper.GetChild(this, 0) as FrameworkElement); 

    foreach (var v in list) 
     if (v.Name == stateGroupName) 
     { 
      stateGroup1 = v; 
      break; 
     } 

    return stateGroup1.CurrentState; 
} 
関連する問題