Events 如何将事件绑定到ContentView的属性IsVisible?
我在Xamarin.Forms中创建了一个控件,允许我显示一个可重用的错误视图,其中包含Events 如何将事件绑定到ContentView的属性IsVisible?,events,xamarin.forms,controls,lottie,propertychanged,Events,Xamarin.forms,Controls,Lottie,Propertychanged,我在Xamarin.Forms中创建了一个控件,允许我显示一个可重用的错误视图,其中包含ContentView和Lottie动画 我的视图包含:Lottie动画、2个标签(标题和描述)和一个“重试”按钮 洛蒂动画设置如下,因为我希望动画只显示一次: <lottie:AnimationView x:Name="networkErrorAnimationView" Animation="resource://lottie_error_no_netw
ContentView
和Lottie
动画
我的视图包含:Lottie
动画、2个标签
(标题和描述)和一个“重试”按钮
洛蒂动画设置如下,因为我希望动画只显示一次:
<lottie:AnimationView
x:Name="networkErrorAnimationView"
Animation="resource://lottie_error_no_network.json?assembly=ShellAppSample"
AnimationSource="EmbeddedResource"
BackgroundColor="Transparent"
AutoPlay="True"
HeightRequest="200" WidthRequest="200"
VerticalOptions="Center" HorizontalOptions="Center"
Clicked="NetworkErrorAnimationView_Clicked"/>
问题是,当我从父视图显示错误控制时,动画已经播放:
<ctrl:ErrorView IsVisible="{Binding ShowErrorView, Converter={StaticResource BoolToVisibilityConverter}}"
Title="{Binding ErrorTitle}"
Description="{Binding ErrorDescription}"
ErrorKind="{Binding ErrorKind}"
RetryButtonCommand="{Binding RetryCommand}" />
我想知道是否有方法将事件绑定到控件的IsVisible属性,以便此时重新启动相应的动画?您可以为
ctrl:ErrorView
添加属性,然后在开始时将自动播放设置为false
这是ctrl:ErrorView
的布局
<ContentView xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:forms="clr-namespace:Lottie.Forms;assembly=Lottie.Forms"
x:Name="MyErrorView"
x:Class="App13.ErrorView">
<ContentView.Content>
<StackLayout>
<forms:AnimationView
x:Name="animationView"
Animation="1.json"
AnimationSource="AssetOrBundle"
RepeatCount="1"
AutoPlay="False"
WidthRequest="100"
HeightRequest="100"/>
<Label x:Name="title" Text="test" />
<Label Text="Hello Xamarin.Forms!" />
</StackLayout>
</ContentView.Content>
</ContentView>
在Contentpage中使用此控件
<ctrl:ErrorView IsVisible="{Binding Isfavourite}" TitleText="{Binding Name}" IsStartAnimationView="{Binding IsStart}" ></ctrl:ErrorView>
这里是运行gif
解决方案是另一天给我的。我只需将此代码添加到控件的代码隐藏中:
protected override void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
base.OnPropertyChanged(propertyName);
if (propertyName == nameof(IsVisible))
{
if (this.IsVisible)
{
networkErrorAnimationView.PlayAnimation();
}
else
{
networkErrorAnimationView.StopAnimation();
}
}
}
这会有帮助吗?您好@Cfun谢谢您的建议。我认为我的问题更多地与control/ContentView
的使用有关,而不是与LottieAnimation
本身有关。我已经实现了类似的解决方案,可以在父视图上显示加载视图,如您所见。如果答复有帮助,请将其作为答案接受(单击“✔” 在这个答案的左上角),它将帮助其他有类似问题的人Hi@Leon Lu,我已经实施了一个给我的更轻松的解决方案。谢谢你的时间。我的答案也是如此!请仔细查看答案
private async void Button_Clicked(object sender, System.EventArgs e)
{
myViewModel.IsStart = !myViewModel.IsStart;
}
protected override void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
base.OnPropertyChanged(propertyName);
if (propertyName == nameof(IsVisible))
{
if (this.IsVisible)
{
networkErrorAnimationView.PlayAnimation();
}
else
{
networkErrorAnimationView.StopAnimation();
}
}
}