我有一个长时间运行的任务,我想显示一个进度指示器和消息。
我尝试过使用ActivityIndicator
,虽然它显示正确,但它允许更新基础控件。
此Xamarin
iOS
代码正是我想要的,但我需要在使用Xamarin.Forms
时执行此操作。
http://developer.xamarin.com/recipes/ios/standard_controls/popovers/display_a_loading_message/
有什么想法吗?
答案 0 :(得分:5)
创建一个自定义渲染器,在整个屏幕上叠加 BoxView 。您可以根据自己的喜好自定义颜色填充和不透明度以显示基础内容。
然后,您可以将 Xamarin.Forms ActivityIndicator 置于屏幕中间以完成相同的效果。
注意 - 但是,目前在 v1.2.3x 中 Android 上存在一个错误,它允许底层控件仍然接收用户输入事件,就像按下按钮一样,尽管 BoxView 在之上。
这个问题在即将发布的 v1.3 版本中显然得到了解决。
更新1
它不易被提取为更复杂控件的一部分,但是获得与链接中类似的效果并不困难。
在您的页面中尝试以下操作: -
使用网格作为基础( 1行,1列),并将其设置为填充屏幕,并将行和列定义设置为 GridUnitType.Star 强>
然后,您可以像网格的子一样创建页面内容,将此放在单元格(0,0)。< / p>
对于下一部分(您可以将其放在控件渲染器中),以便可以在多个页面中轻松地重复使用它。如果你对控制渲染器不太满意,你可以随时创建一个函数来返回 Grid 对象,但是你可以在多个页面中使用它: -
网格作为您的基础
BoxView 作为网格的孩子
ActivityIndicator 作为网格的孩子。
从上面得到网格结果后,您也可以将其添加到网页的网格 根控件中,再次定位 - 在单元格(0,0)。
然后,您可以控制此内容上此重叠面板的可见性。
当您显示 / 隐藏面板时,您自然会想要设置 ActivityIndicator 的 IsRunning 属性。只需创建一些方法,例如 ShowActivityIndicator()和 HideActivityIndicator(),或许可以简化此操作。