我目前正在开发WPF应用程序。我使用基于AdaptiveTrigger
的{{1}}视觉状态管理器来创建自适应布局,该布局全部由我的MinWindowWidth
标记定义和控制。我根本不会从ViewModel创建或更改状态。
我定义了多个州,如果有办法确定用户的窗口当前处于XAML
的状态,我想知道 代码 ?
我已经看到了从背后的代码创建和更改视觉状态的方法,但我似乎无法找到任何合适的方法(如果当Visual State Manager完全由View而不是ViewModel控制时,确定当前可视状态。
答案 0 :(得分:2)
简答:
您可以在XAML中命名相关的VisualStateGroup,并从后面的代码访问其CurrentState属性。您还可以订阅VisualStateGroup的CurrentStateChanged
和CurrentStateChanging
事件。
更多信息:
VisualStates在VisualStateGroup下定义。每个VisualStateGroup都包含一个VisualStates集合,其中一次只能有一个是活动的。现在,您的窗口可以在VisualStateManager.VisualStateGroups
下定义多个VisualStateGroup。 - 所以它不像Window有VisualState。
答案 1 :(得分: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;
};