当ContentPage加载完成时如何收到通知

4
我有一些包含ContentView对象的XAML ContentPages。通常,我根据ContentPage中设置的this.Width和this.Height来调整这些对象的大小。但是,如果在ContentPage加载完成之后没有明确调用我的ContentView对象,则宽度和高度值为空,因为尚未设置这些值。
我想知道的是,如何告诉我的ContentView在ContentPage加载完成之前等待获取宽度和高度值?
2个回答

4
Xamarin.Forms提供了两种生命周期事件:
  1. OnAppearing
  2. OnDisappearing
这两个事件可以在Page子类中被重写。
事实上,OnAppearing将在屏幕出现前执行。如果你想在屏幕出现后立即执行一个Loaded事件,有一个解决方法。

解决方法

  1. 在ViewModel中创建以下属性。
private bool _toggleTemp;
public bool ToggleTemp
{
    get => _toggleTemp;
    set => SetProperty(ref _toggleTemp, value);
}
  1. 在构造函数的最后一行添加以下代码:LoadingVm.ToggleTemp = true;
  2. 在您的屏幕上添加一个开关,并将其IsVisible属性设置为false,如下所示。(仅用于演示)
<Switch IsToggled="{Binding ToggleTemp}" Toggled="Switch_OnToggled" IsVisible="False" />
  1. 现在,你可以在Switch_OnToggled的Page Loaded事件中编写想要编写的代码。
private async void Switch_OnToggled(object sender, ToggledEventArgs e)
{ 
    /* Your code goes here... */ 
}

如果您有任何疑问,请告知我。


哇,感谢您详细的帖子。我会尝试这个并让您知道是否有任何问题。我很感激您的帮助。 - Jimmy
1
@Jimmy,这个回答解决了你的问题吗?如果是的话,能否请你将我的答案标记为正确(或者如果你喜欢我的方法,甚至给我点赞),以便关闭本主题? - iam.Carrot

3

我找到了另一个解决方法,它在Xamarin Forms 4.8中有效:

private bool isStarted = false;
protected override void LayoutChildren(double x, double y, double width, double height)
{
    base.LayoutChildren(x, y, width, height);
    if (!isStarted)
    {
        isStarted = true;
        // do something

    }
}


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接