C# Xamarin表单在启动时显示动画标签
我有个问题。我创建了一个带有字符串的ContentPage: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
公共主页(字符串状态)
。
现在,当我用值“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);
}
}