use*_*147 2 winrt-xaml win-universal-app windows-10 windows-10-universal
我知道我可以使用VisualStateManager.GoToState以编程方式设置可视状态.
但是,如果从XAML触发视觉状态,如何获得当前视觉状态?
首先,您必须了解一个控件有几种当前的可视状态.但是对于一个视觉状态组(以及一个对照的几个视觉状态组)存在一个当前视觉状态.
对于特定的可视状态组,您可以使用事件CurrentStateChanged(或CurrentStateChanging)来捕获可视状态更改:
<VisualStateManager.VisualStateGroups>
<VisualStateGroup x:Name="Custom"
CurrentStateChanged="CustomGroup_CurrentStateChanged">
Run Code Online (Sandbox Code Playgroud)
在C#中:
private void CustomGroup_CurrentStateChanged(object sender, VisualStateChangedEventArgs e)
{
Debug.WriteLine(e.NewState.Name);
}
Run Code Online (Sandbox Code Playgroud)
如果无法修改VisualStateGroup的XAML代码,则可以使用VisualStateManagner.GetVisualStateGroups方法查询控件的VisualStateGroups集合:
foreach(var group in VisualStateManager.GetVisualStateGroups(aControl))
{
var currentStateName = group.CurrentState.Name;
}
Run Code Online (Sandbox Code Playgroud)
如果需要检查特定Visual State Group的状态更改,则需要他的名称(例如"CommonStates"),并且可以执行以下操作:
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;
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
382 次 |
| 最近记录: |