(当前版本V7.0.94,VisualState有bug)
(资料图片仅供参考)
控件状态指控件当前处于什么使用状态,如禁用、聚焦、鼠标悬停等等,当控件进入到某种状态时,可以通过【附加属性】【VisualStateManager.VisualStateGroups】设置特定的样式。VisualStateManager.VisualStateGroups的使用结构,套了几层集合,有些复杂,如下图所示:
一、MAUI为可视化控件提供了丰富的内置状态,大多数时候,我们主要通过内置状态来管理控件的状态样式,但如果无法满足开发需求,也可以自定义状态。内置状态包括:
所有派生自VisualElemnet的视觉控件:Normal、Disabled、Focused、PointerOver
Button和ImageButton特有:Pressed
CheckBox特有:IsChecked
RadioButton特有:Checked、Unchecked
Switch特有:On、Off
CollectionView特有:Selected
CarouselView特有:DefaultItem、CurrentItem、PreviousItem、NextItem
二、使用控件中定义和使用控件状态样式
三、在样式中定义和使用控件状态样式
四、在一个控件状态中,影响其它控件的样式
五、自定义控件状态及其样式
1、XAML定义和使用状态样式
2、通过后台代码改变控件状态
public partial class MainPage : ContentPage{ public MainPage() { InitializeComponent(); //初始化后,调用GoToState函数,设置状态 GoToState(false); } //OnTextChanged事件处理程序,使用正则对输入值进行判断。如果符合正则规则,则调用GoToState函数并传入true,反之传入false void OnTextChanged(object sender, TextChangedEventArgs args) { bool isValid = Regex.IsMatch(args.NewTextValue, @"^[2-9]\d{2}-\d{3}-\d{4}$"); GoToState(isValid); } //通过GoToState函数设置状态 //根据传入的参数值,如为true,则状态为Valid;如为false,则为Invalid void GoToState(bool isValid) { string visualState = isValid ? "Valid" : "Invalid"; //VisualStateManager.GoToState方法,设置控件状态,参数①为控件对象,参数②为状态的字符串值 VisualStateManager.GoToState(stackLayout, visualState); }}