我目前正在开发 WPF 应用程序。我正在使用AdaptiveTrigger
基于 s的 Visual State ManagerMinWindowWidth
来创建自适应布局,这一切都由我的XAML
标记定义和控制。我根本不从 ViewModel 创建或更改状态。
我定义了许多状态,我想知道是否有办法从C#
后面的代码中确定用户窗口当前处于什么状态?
我已经看到了从后面的代码创建和更改视觉状态的方法,但是当视觉状态管理器完全由视图而不是 ViewModel。
我目前正在开发 WPF 应用程序。我正在使用AdaptiveTrigger
基于 s的 Visual State ManagerMinWindowWidth
来创建自适应布局,这一切都由我的XAML
标记定义和控制。我根本不从 ViewModel 创建或更改状态。
我定义了许多状态,我想知道是否有办法从C#
后面的代码中确定用户窗口当前处于什么状态?
我已经看到了从后面的代码创建和更改视觉状态的方法,但是当视觉状态管理器完全由视图而不是 ViewModel。
简短回答:
您可以在 XAML 中命名相关的 VisualStateGroup 并从后面的代码中访问其 CurrentState 属性。您还可以订阅 VisualStateGroup 的CurrentStateChanged
和CurrentStateChanging
事件。
更多信息:
VisualStates 在 VisualStateGroup 下定义。每个 VisualStateGroup 都包含一组 VisualState,一次只能激活一个。现在您的窗口可以在VisualStateManager.VisualStateGroups
. - 所以它不像 Window 有一个 VisualState。
参考下面的片段。在此示例中,网格包含视觉状态组。因此,我们从网格中检索这些视觉状态组。
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;
};