我目前正在开发一个WPF应用程序。我使用基于MinWindowWidth
的AdaptiveTrigger
s的可视化状态管理器来创建一个自适应布局,这是由我的XAML
标记定义和控制的。我根本不从ViewModel中创建或更改状态。
我有许多定义的状态,我想知道如果有一种方法来确定用户的窗口是什么状态当前从C#
代码?
我已经看到了创建和改变视觉状态的方法,但我似乎找不到任何合适的方法(如果它们存在)来确定当前视觉状态,当视觉状态管理器完全由视图而不是ViewModel控制时。
简短回答:您可以在XAML中命名相关的VisualStateGroup,并从后面的代码访问它的CurrentState属性。您也可以订阅VisualStateGroup的CurrentStateChanged
和CurrentStateChanging
事件。
更多信息:
VisualStates在VisualStateGroup下定义。每个VisualStateGroup包含一个visualstate的集合,其中一次只能有一个是活动的。现在您的窗口可以在VisualStateManager.VisualStateGroups
下定义多个VisualStateGroups。-所以它不像窗口有一个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;
};