Xaml VisualStateManager中的状态名称有意义吗?
Xaml VisualStateManager中的状态名称有意义吗?,xaml,uwp,windows-runtime,Xaml,Uwp,Windows Runtime,VisualStateManager中的状态和VisualStateGroups的名称是任意的,还是有更深的含义 在某些方面,它们似乎类似于CSS中的伪类(按钮有公共状态:正常,指针,按下,和禁用,而CSS有:悬停,:活动,以及锁定禁用控件的方法)。但它们也是不同的复选框(看起来),如选中的,未选中的,和不确定的 在开发应用程序时,我如何知道哪些可视状态可用?如果我用错了名字会怎么样?各州的名字有更深的含义吗? VisualStateManager中的状态和VisualStateGroups的名
VisualStateManager
中的状态和VisualStateGroup
s的名称是任意的,还是有更深的含义
在某些方面,它们似乎类似于CSS中的伪类(按钮
有公共状态
:正常
,指针
,按下
,和禁用
,而CSS有:悬停
,:活动
,以及锁定禁用控件的方法)。但它们也是不同的复选框(看起来),如选中的
,未选中的
,和不确定的
在开发应用程序时,我如何知道哪些可视状态可用?如果我用错了名字会怎么样?各州的名字有更深的含义吗?
VisualStateManager
中的状态和VisualStateGroup
s的名称是任意的,还是有更深的含义
州和VisualStateGroup
s的名称确实是任意的,但它们有更深的含义
中的是UI元素处于特定状态时的视觉外观。它们使用s或setter来表示对给定控件的任意更改(例如,使背景为红色)。控件作者可以在其代码隐藏中调用以激活命名的VisualState
通过这种方式,VisualState名称是任意的:我可以创建一个名为CitelaosGreatState
的VisualState,并通过调用GoToState(这是“CitelaosGreatState”)
来激活它。这就是为什么有这么多的名称按钮有你提到的CommonState,而复选框有完全不同的名称
但是,出于实际目的,您选择的VisualState名称不是任意的
如果您使用VisualStateManager,您几乎肯定希望选择与原始ControlTemplate中的名称完全对应的VisualState和VisualStateGroup名称(您可以在XAML设计器或中找到)。这是一个功能问题:例如,按钮
的实现者为VisualState选择了一个任意名称,当您将按钮悬停在CommonStates上时,VisualState就会出现。他们的codebehind中处理悬停按钮的逻辑调用GoToState(这是“指针悬停”)
(或一些等效的)。如果要自定义该外观,必须提供具有该名称的VisualState
当然,您也可以提供一个名为CitelaosGreatState
,甚至是Hover
,很酷的状态,但是如果codebehind从不使用相同的字符串调用GoToState
,则无论名称如何,您的状态都将永远不会被激活
当然,这意味着对于完全自定义的控件(您可以控制VisualStateManager
和对VisualStateManager.GoToState
的调用),您可以随意命名您的状态
我如何知道要选择哪些名称?
在开发应用程序时,我如何知道哪些可视状态可用
- 完全自定义控件:如上所述,如果您同时编写
和对VisualStateManager
VisualStateManager.GoToState的调用,请随意命名VisualState!如果您定义了一个名为
的状态,则可以使用GoToStateState1
在codebehind中激活它State1
- 现有控件的自定义模板:如果要重新模板现有控件(使用
),则应选择与该控件上现有状态匹配的名称。例如,按钮定义ControlTemplate
:公共状态
,悬停
,指针悬停
,以及按下
。定义这些。具有其他名称的状态将永远不会被激活(因为XAML团队编写的代码隐藏永远不会使用该名称启动)。了解现状-禁用
TargetType
)VisualStateGroup
中的名称- 您定义了一个codebehind永远不会使用
激活的VisualState(例如,您为按钮的自定义模板添加了一个名为GoToState
或CitelaosGreatState
的状态):没有什么可怕的事情发生,但您的状态永远不会被激活Hover
- 您无法定义codebehind尝试激活的VisualState(例如,您为自定义按钮模板添加了不完整的VisualStateGroup):
调用无效gostate