微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Xamarin-如何使用MessagingCenter触发动画

如何解决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方法,但没有动画发生。

这可能是线程问题吗?我已经尝试过awaitBeginInvokeOnMainThread,但都没有用。

解决方法

尝试执行此操作,希望对您有所帮助。

用于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 举报,一经查实,本站将立刻删除。