首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Windows UAP:获取页面当前视觉状态

Windows UAP:获取页面当前视觉状态
EN

Stack Overflow用户
提问于 2016-02-11 18:00:14
回答 2查看 481关注 0票数 2

我知道我可以使用VisualStateManager.GoToState以编程方式设置视觉状态。

但是,如果视觉状态是从XAML触发的,如何获取当前的视觉状态?

EN

回答 2

Stack Overflow用户

发布于 2016-02-12 00:54:28

首先,您必须了解一个控件有几个当前的可视状态。但是对于一个视觉状态组存在一个当前视觉状态(并且对于一个控件存在多个视觉状态组)。

对于特定的可视状态组,您可以使用event CurrentStateChanged (或CurrentStateChanging)来捕获可视状态的更改:

代码语言:javascript
运行
复制
<VisualStateManager.VisualStateGroups>
    <VisualStateGroup x:Name="Custom"
                      CurrentStateChanged="CustomGroup_CurrentStateChanged">

在C#中:

代码语言:javascript
运行
复制
private void CustomGroup_CurrentStateChanged(object sender, VisualStateChangedEventArgs e)
{
    Debug.WriteLine(e.NewState.Name);
}

如果不能修改VisualStateGroup的XAML代码,可以使用VisualStateManagner.GetVisualStateGroups方法查询控件的VisualStateGroups集合:

代码语言:javascript
运行
复制
foreach(var group in VisualStateManager.GetVisualStateGroups(aControl))
{
    var currentStateName = group.CurrentState.Name;
}

如果您需要检查特定视觉状态组的状态更改,您需要他的名字(例如"CommonStates"),并可以执行以下操作:

代码语言:javascript
运行
复制
var aControl = this;
var visualStateGroupName = "CommonStates";
var myVsg = VisualStateManager.GetVisualStateGroups(aControl).FirstOrDefault(vsg => vsg.Name == visualStateGroupName);
var currentState = myVsg.CurrentState;
myVsg.CurrentStateChanged += (s, e) =>
{
    currentState = e.NewState;
};
票数 6
EN

Stack Overflow用户

发布于 2016-02-13 05:57:38

手动处理状态,这不是一个疯狂的想法。下面是操作步骤:

代码语言:javascript
运行
复制
public sealed partial class MainPage : Page
{
    public MainPage()
    {
        InitializeComponent();
        MyVisualStateGroup.CurrentStateChanged += (s, e) =>
            HandleState(AdaptiveVisualStateGroup.CurrentState);
    }

    private void HandleState(VisualState currentState)
    {
        // TODO
    }
}

讲得通?

还有一件重要的事情要记住。可以有多个可视状态处于活动状态。当您在问题中询问页面视觉状态是什么时,这是一个加载的问题。单个视觉状态组只能有一个活动的视觉状态。但是一个页面可以有多个视觉状态组。这意味着一个页面可以有多个活动的可视状态。我知道在很多情况下只有一个视觉状态组。但我想让你知道,这个问题本身是棘手的,因为有多个视觉状态组。

祝你好运!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/35336047

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档