WPF确定从代码隐藏在XAML中定义的当前VisualState

时间:2015-08-17 23:08:38

标签: c# xaml view viewmodel adaptive-design

我目前正在开发WPF应用程序。我使用基于AdaptiveTrigger的{​​{1}}视觉状态管理器来创建自适应布局,该布局全部由我的MinWindowWidth标记定义和控制。我根本不会从ViewModel创建或更改状态。

我定义了多个州,如果有办法确定用户的窗口当前处于XAML的状态,我想知道 代码

我已经看到了从背后的代码创建更改视觉状态的方法,但我似乎无法找到任何合适的方法(如果当Visual State Manager完全由View而不是ViewModel控制时,确定当前可视状态。

2 个答案:

答案 0 :(得分:2)

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

更多信息:

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;
    };