从代码隐藏更改条目的可视状态

Changing Visual state of an Entry from code behind

提问人:Suraj 提问时间:11/15/2023 更新时间:11/16/2023 访问量:80

问:

我一直在尝试从 CodeBehind 更改条目的视觉状态。 因此,如果该条目被禁用,则背景颜色应更改为灰色,如果正常,则应为白色,这在styles.xaml中明确定义,根据用户输入,我调用VisualStateManager.GoToState(Entry, “Disabled”);或 VisualStateManager.GoToState(Entry, “Normal”)。一旦它被禁用,背景颜色变为灰色,即使我强制设置它或调用 VisualStateManager,我也无法再更改背景颜色。我错过了什么吗?

Xamarin Maui

评论


答:

0赞 Alexandar May - MSFT 11/16/2023 #1

您可以参考以下内容,了解如何在代码隐藏中实现 VisualStateManager

var vsg = new VisualStateGroup() { Name = "CommonStates" };
var vs_list = new VisualStateGroupList();

var vs_nor = new VisualState { Name = "Normal" };
var vs_dis = new VisualState { Name = "Disabled" };   
var vs_fo = new VisualState { Name = "Focused" };

vs_nor.Setters.Add(new Setter { Property = BackgroundColorProperty, Value = Colors.White });
vs_dis.Setters.Add(new Setter { Property = BackgroundColorProperty, Value = Colors.Grey });
vs_fo.Setters.Add(new Setter { Property=BackgroundColorProperty, Value=Colors.Green });

vsg.States.Add(vs_nor);
vsg.States.Add(vs_dis);
vsg.States.Add(vs_fo);
vs_list.Add(vsg);

// myEntry is the name of the Entry in xaml
VisualStateManager.SetVisualStateGroups(myEntry, vs_list);

评论

0赞 Suraj 11/16/2023
它更改了除背景颜色、字体大小和字体颜色更改之外的所有内容,但一旦将背景颜色设置为禁用,它就永远不会单独更改背景颜色
0赞 Alexandar May - MSFT 11/17/2023
@Suraj 请考虑将 VS 升级到最新版本,并在创建项目时选择 .NET 8.0 框架,以查看背景颜色是否有效。如果失败,可以向 github:github.com/dotnet/maui/issues 报告。
0赞 Suraj 11/17/2023
确定!谢谢你的信息,我也会这样做。
0赞 Alexandar May - MSFT 11/20/2023
@Suraj 感谢您的更新,期待您的回音。
0赞 Suraj 11/20/2023
@Alexander - 你是对的,这解决了问题!
1赞 BIT 11/16/2023 #2

这似乎是 .NET 7 中的一个错误。我检查了它在 .NET 8 中不再可重现,因此请随时根据本指南将您的项目升级到 .NET 8:

将 MAUI 从 .NET 7 升级到 .NET 8Upgrade MAUI from .NET 7 to .NET 8

评论

0赞 Suraj 11/16/2023
谢谢!我也遇到了这个,如果有效,我会尝试更新你!
0赞 Suraj 11/20/2023
将其标记为已接受!
0赞 BIT 11/20/2023
很高兴听到它有所帮助。