如何解决Xamarin-如何使用MessagingCenter触发动画
我有一个ContentView
,它已从viewmodel订阅了MessagingCenter
消息(为了通过不将视图耦合到viewmodel来保持mvvm模式)。
ContentView
收到消息后,我希望它执行动画以使滑动视图可见,如下所示:
MessagingCenter.Subscribe<SideMenuviewmodel>(this,"IsMenuOpen",async (sender) =>
{
if (sender.IsMenuOpen)
{
Mainswipeview.Open(OpenSwipeItem.RightItems);
await SwipeContent.ScaleYTo(1,300,Easing.SinOut);
}
else
{
Mainswipeview.Close();
await SwipeContent.ScaleYTo(1,Easing.SinOut);
}
});
此动画与我在同一文件中其他事件监听器中的动画相同,并且效果很好。但是,在MessagingCenter
中,执行链工作正常,它调用了animation方法,但没有动画发生。
这可能是线程问题吗?我已经尝试过await
和BeginInvokeOnMainThread
,但都没有用。
解决方法
尝试执行此操作,希望对您有所帮助。
用于SEND的MessagingCenter
MessagingCenter.Send(this,"SideMenuViewModel:IsMenuOpen",IsMenuOpen); //IsMenuOpen - is the bool value for your situation
Subscription的MessagingCenter
MessagingCenter.Subscribe<SideMenuViewModel,bool>(this,(sender,IsMenuOpen) =>
{
if (IsMenuOpen)
{
MainSwipeView.Open(OpenSwipeItem.RightItems);
await SwipeContent.ScaleYTo(1,300,Easing.SinOut);
}
else
{
MainSwipeView.Close();
await SwipeContent.ScaleYTo(1,Easing.SinOut);
}
});
您的布尔值将在订阅的IsMenuOpen
参数中获取。它将仅在MessagingCenter中本地存在范围。
让我知道它是否可以正常工作...
, await SwipeContent.ScaleYTo(1,Easing.SinOut);
ScaleTo
方法获取动画开始时的当前Scale
属性值(默认值为1),然后从该值缩放到其第一个参数,1
表示没有更改,则您尝试将其更改为非1
的值。
喜欢:
await SwipeContent.ScaleYTo(1.5,Easing.SinOut);
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。