2

カスタム動作のオーバーライドと、その動作のイベントに追加されたイベント ハンドラーで使用VisualStateManager.GetVisualStateGroupsしてみました。どちらの場合も、空のリストが表示されます。OnAttachedAssociatedObject.Loaded

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

はい、コントロールにはVisualStateGroupsとがありVisualStatesます。

4

2 に答える 2

4

アンソニーの答えに基づいています。ここでは、Metro アプリの例を示します。

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;
}
于 2012-10-11T08:17:59.063 に答える
3

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

于 2011-07-20T12:21:37.610 に答える