WPF从后面的代码确定XAML中定义的当前VisualState



我目前正在开发一个WPF应用程序。我使用基于MinWindowWidthAdaptiveTrigger s的可视化状态管理器来创建一个自适应布局,这是由我的XAML标记定义和控制的。我根本不从ViewModel中创建或更改状态。

我有许多定义的状态,我想知道如果有一种方法来确定用户的窗口是什么状态当前从C#代码?

我已经看到了创建改变视觉状态的方法,但我似乎找不到任何合适的方法(如果它们存在)来确定当前视觉状态,当视觉状态管理器完全由视图而不是ViewModel控制时。

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

更多信息:

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

相关内容

  • 没有找到相关文章

最新更新