C# Xamarin表单在启动时显示动画标签

C# Xamarin表单在启动时显示动画标签,c#,xamarin,xamarin.forms,xamarin.android,xamarin.ios,C#,Xamarin,Xamarin.forms,Xamarin.android,Xamarin.ios,我有个问题。我创建了一个带有字符串的ContentPage:公共主页(字符串状态)。 现在,当我用值“Mail sent”调用此页面时,我想从顶部滑入一个标签2秒钟,然后再次将其滑回。现在标签位于一个RelativeLayout中,如下所示: <Label x:Name="txtMailSent" HorizontalTextAlignment="Center" TextColor="White" BackgroundColor="Green" Text="A verification m

我有个问题。我创建了一个带有字符串的ContentPage:
公共主页(字符串状态)
。 现在,当我用值“Mail sent”调用此页面时,我想从顶部滑入一个标签2秒钟,然后再次将其滑回。现在标签位于一个
RelativeLayout
中,如下所示:

<Label x:Name="txtMailSent" HorizontalTextAlignment="Center" TextColor="White" BackgroundColor="Green" Text="A verification mail has been sent."
    RelativeLayout.XConstraint="{ConstraintExpression
    Type=RelativeToParent,Property=Width,Factor=0,Constant=0}"
    RelativeLayout.YConstraint="{ConstraintExpression
    Type=RelativeToParent,Property=Height,Factor=0,Constant=0}"
    RelativeLayout.WidthConstraint="{ConstraintExpression
    Type=RelativeToParent,Property=Width,Factor=1,Constant=0}"
    RelativeLayout.HeightConstraint="{ConstraintExpression
    Type=RelativeToParent,Property=Height,Factor=0.025,Constant=0}"/>

但当我启动应用程序并给出该参数时,没有标签显示。我做错了什么?

我认为您的代码在视觉元素完全呈现之前执行。你可以这样做

private string status = string.Empty;
public MainPage(string Status)
{
    InitializeComponent();
    status = Status;

    SizeChanged += (s, a) =>
    {
        txtMailSent.TranslateTo(0, -txtMailSent.Height, 1, Easing.Linear);
    };
}

protected async  override void OnAppearing()
{
    if (status == "Mail sent")
    {
        await txtMailSent.TranslateTo(0, 0, 4000, Easing.Linear);
        await Task.Delay(200);
        await txtMailSent.TranslateTo(0, -txtMailSent.Height, 4000, Easing.Linear);
    }
}

正如下面所建议的,您可能应该考虑在OnAppearing中触发动画,但我认为上面代码的主要问题是您创建了一个指向ShowMail的操作,但您没有调用它。仅仅创建动作是不够的。您可以直接调用ShowMail函数,因此我不确定您为什么不这样做,但您可能仍然存在这样一个问题,即它在页面实际可见之前就开始执行。
private string status = string.Empty;
public MainPage(string Status)
{
    InitializeComponent();
    status = Status;

    SizeChanged += (s, a) =>
    {
        txtMailSent.TranslateTo(0, -txtMailSent.Height, 1, Easing.Linear);
    };
}

protected async  override void OnAppearing()
{
    if (status == "Mail sent")
    {
        await txtMailSent.TranslateTo(0, 0, 4000, Easing.Linear);
        await Task.Delay(200);
        await txtMailSent.TranslateTo(0, -txtMailSent.Height, 4000, Easing.Linear);
    }
}