1

私は現在、WPFアプリケーションに取り組んでいます。Visual State Manager を にAdaptiveTrigger基づくとともに使用MinWindowWidthして、マークアップによってすべて定義および制御されるアダプティブ レイアウトを作成していますXAML。ViewModel から状態を作成または変更することはまったくありません。

いくつかの状態が定義されていますが、コード ビハインドからユーザーのウィンドウが現在どの状態にあるかを判断する方法があるC#かどうか疑問に思っています。

コード ビハインドからビジュアル ステートを作成および変更する方法を見てきましが、Visual State Manager が完全にViewModel ではなく View です。

4

2 に答える 2

2

簡単な回答: 関連する VisualStateGroup に XAML で名前を付けて、コード ビハインドからその CurrentState プロパティにアクセスできます。VisualStateGroupのCurrentStateChangedおよびイベントをサブスクライブすることもできます。CurrentStateChanging

より詳しい情報:

VisualStates は、VisualStateGroup の下で定義されます。各 VisualStateGroup には VisualStates のコレクションが含まれており、一度にアクティブにできるのは 1 つだけです。これで、ウィンドウの で定義された複数の VisualStateGroups を持つことができますVisualStateManager.VisualStateGroups。- したがって、ウィンドウに VisualState があるわけではありません。

于 2015-09-30T11:30:07.357 に答える
0

以下のスニペットを参照してください。この例では、グリッドに表示状態グループが含まれています。その結果、これらの視覚状態グループをグリッドから取得します。

VisualStateGroup _visualStateGroup = null;

...

var grid = ResourceLocator.Instance[typeof(Grid)] as Grid;
_visualStateGroup = VisualStateManager.GetVisualStateGroups(grid)[0];

_visualStateGroup.CurrentStateChanged += (se, ev) =>
    {
        var state = _visualStateGroup.CurrentState.Name;
    };
于 2015-09-30T12:51:45.440 に答える