C# 单击按钮隐藏/取消隐藏XAML元素
当我发出C# 单击按钮隐藏/取消隐藏XAML元素,c#,xaml,xamarin.forms,show-hide,activity-indicator,C#,Xaml,Xamarin.forms,Show Hide,Activity Indicator,当我发出WebService请求时,我一直在尝试实现这个ActivityIndicator。我遇到了几种不同的解决方案,我正在尝试最简单的一种,如下所示: 嗯,这对我不起作用。在我看来,它似乎不接受我想要给变量的新值。当我通过代码将IsVisible变量设置为true时,我可以看到旋转的圆圈,但是,当我将变量设置为false并单击按钮时,什么也没有发生。此外,应该有一个“空”空间对应于不存在的元素 任何帮助都将不胜感激 非常感谢 LoginPage.xaml: LoginPage.xaml
WebService
请求时,我一直在尝试实现这个ActivityIndicator
。我遇到了几种不同的解决方案,我正在尝试最简单的一种,如下所示:
嗯,这对我不起作用。在我看来,它似乎不接受我想要给变量的新值。当我通过代码将IsVisible
变量设置为true时,我可以看到旋转的圆圈,但是,当我将变量设置为false并单击按钮时,什么也没有发生。此外,应该有一个“空”空间对应于不存在的元素
任何帮助都将不胜感激
非常感谢
LoginPage.xaml:
LoginPage.xaml.cs:
void登录(对象发送方,事件参数e)
{
activityIndicator.IsVisible=true;
方法();
activityIndicator.IsVisible=false;
}
在评论的帮助下,我做了一些小改动,让它工作起来。我相信等待命令是我遗漏的细节之一。
但我不确定这是否是最好的解决方案。我很确定我应该用某种标志来做这件事,但我还是做不到
以下是两种解决方案:
1。通过将IsVisible
属性设置为FALSE
,可以隐藏ActivityIndicator
,而不为元素保留任何空间
LoginPage.xaml:
LoginPage.xaml.cs:
异步无效登录(对象发送方,事件参数e)
{
activityIndicator.IsVisible=true;
等待任务。延迟(500);
方法();
activityIndicator.IsVisible=false;
}
2。通过将IsRunning
属性设置为FALSE
,可以隐藏活动指示器
,并为元素保留空间
LoginPage.xaml:
LoginPage.xaml.cs:
异步无效登录(对象发送方,事件参数e)
{
activityIndicator.IsRunning=true;
等待任务。延迟(500);
方法();
activityIndicator.IsRunning=false;
}
根据Method
正在执行的操作,它可能会阻塞UI线程,因此在Method
完成之前,ActivityIndicator无法更新您无法尝试的方式执行此操作。在SignIn方法完成之前,显示屏不会重新布局。所以,如果你把它设为“假”,你将永远看不到任何东西。而且不会为它保留空白-阅读IsVisible的功能。寻找一些不同的活动指示器的工作示例。或者你在youtube上遗漏了一些小细节?(我没有看。)有没有提到使用async/await?或任务。运行?抱歉,我没有详细信息,但基本上你需要UI线程在“登录”运行时不被阻塞。另一种解决方案是操纵不透明度。@Rafael您的按钮在内容页外的情况如何?你能在SignIn方法中达到调试点吗?谢谢你的评论!总的来说,我已经能够调试了,当我按下buttons@ToolmakerSteve我认为阻止UI线程的方法是一个很好的猜测。。。我会查一下你提到的这些细节。谢谢使用wait
时,该方法应声明为async
:async void sign(…
隐藏:不保留空格
。确切地说。这是可见的定义行为。如果要保留空格,请将不透明度
设置为0(不可见)或1(完全可见)。(删除IsVisible
属性,或使用IsVisible=“true”
)您还可以将不透明度设置为分数,以使某些内容部分可见;例如0.5
半可见,半透明。(如果不透明度0
没有保留空间,请设置一个非常小的数字,如0.001
——这在iOS上的某些情况下是必需的。)
行应位于堆栈布局的内部。将其移动到活动指示器
之后和
行之前的下一行。请测试此更改,如果有效,请编辑您的答案以显示更正的代码。我认为您可以根据设置属性IsRunning
,而不是IsVisible
就性能而言,最好使用不透明度。原因:不必每次显示/隐藏元素时都执行布局。ActivityIndicator不应该旋转-绑定到其IsRunning
属性,实际上,您甚至可能不需要隐藏它。如果手动设置IsRunning=False
,它是否只显示一个空白区域您可以随意操作!然后用您更改的值替换“False”
,而不是对IsVisible执行此操作。