1

我目前正在开发 WPF 应用程序。我正在使用AdaptiveTrigger基于 s的 Visual State ManagerMinWindowWidth来创建自适应布局,这一切都由我的XAML标记定义和控制。我根本不从 ViewModel 创建或更改状态。

我定义了许多状态,我想知道是否有办法从C#后面的代码中确定用户窗口当前处于什么状态?

我已经看到了从后面的代码创建更改视觉状态的方法,但是当视觉状态管理器完全由视图而不是 ViewModel。

4

2 回答 2

2

简短回答: 您可以在 XAML 中命名相关的 VisualStateGroup 并从后面的代码中访问其 CurrentState 属性。您还可以订阅 VisualStateGroup 的CurrentStateChangedCurrentStateChanging事件。

更多信息:

VisualStates 在 VisualStateGroup 下定义。每个 VisualStateGroup 都包含一组 VisualState,一次只能激活一个。现在您的窗口可以在VisualStateManager.VisualStateGroups. - 所以它不像 Window 有一个 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 回答