【问题标题】:How to call a method AFTER a view has rendered in MAUI - OnAppearing fires too soon如何在 MAUI 中呈现视图后调用方法 - OnAppearing 触发太快
【发布时间】:2022-06-16 11:29:47
【问题描述】:

我有一些动画想要在视图加载后触发。

其中一些依赖于页面上其他视图的位置值,但在 OnAppearing 触发时,这些控件的 X 和 Y 值尚未设置。

其他人可以自己运行,但因为它们是在 OnAppearing 中开始的,所以前几帧不会渲染。

在方法的开头添加一个 Task.Delay 可以解决问题,但显然不是很好。

有什么方法可以创建这样的方法,或者可以通过行为来实现吗?它们需要自动触发,而不是响应 TextChanged 等控制事件。

谢谢!

【问题讨论】:

    标签: maui


    【解决方案1】:

    您可以从本机端执行此操作,在 Ios 中,您可以覆盖自定义渲染器中的 ViewDidLoad 方法,例如:

     public class MyPageRenderer : PageRenderer
        {
    
            protected override void OnElementChanged(VisualElementChangedEventArgs e)
            {
                base.OnElementChanged(e);
            }
            public override void ViewDidLoad()
            {
                base.ViewDidLoad();
                //call before ViewWillAppear and only called once
            }
    
            public override void ViewWillAppear(bool animated)
            {
                base.ViewWillAppear(animated);
            }
        }
    

    和android,重写OnAttachedToWindow方法:

    public class MyPageRenderer : PageRenderer
        {
            public MyPageRenderer(Context context) : base(context)
            {
            }
    
            protected override void OnElementChanged(ElementChangedEventArgs<Page> e)
            {
                base.OnElementChanged(e);
            }
    
            protected override void OnAttachedToWindow()
            {
                base.OnAttachedToWindow();
            }
        }
    

    【讨论】:

      猜你喜欢
      • 2023-03-09
      • 1970-01-01
      • 1970-01-01
      • 2011-07-09
      • 1970-01-01
      • 2014-09-19
      • 1970-01-01
      • 1970-01-01
      • 2015-08-27
      相关资源
      最近更新 更多