【问题标题】:Xamarin - How to trigger an animation using a MessagingCenterXamarin - 如何使用 MessagingCenter 触发动画
【发布时间】:2020-09-15 09:25:41
【问题描述】:

我有一个 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, 300, Easing.SinOut);
    }
});

此动画与我在同一文件上的其他事件侦听器中的动画相同,并且效果很好。但是,在MessagingCenter 中,执行链运行良好,它调用了动画方法,但没有发生动画。

这可能是线程问题吗? awaitBeginInvokeOnMainThread 我都试过了,但都没有成功。

【问题讨论】:

  • 如何从消息中心实际发送数据,也添加一下
  • @Blu 这并不真正相关,因为订阅者在获取消息方面工作得非常好,但只是动画方法在被调用时不起作用。
  • 现在可以用了吗?

标签: c# xamarin animation xamarin.forms messagingcenter


【解决方案1】:

试试这个,希望对你有帮助。

用于发送的消息中心

MessagingCenter.Send(this, "SideMenuViewModel:IsMenuOpen", IsMenuOpen);  //IsMenuOpen - is the bool value for your situation

订阅消息中心

MessagingCenter.Subscribe<SideMenuViewModel, bool>(this, "SideMenuViewModel:IsMenuOpen", (sender, IsMenuOpen) =>
     {
        if (IsMenuOpen)
        {
            MainSwipeView.Open(OpenSwipeItem.RightItems);
            await SwipeContent.ScaleYTo(1, 300, Easing.SinOut);
        }
        else
        {
            MainSwipeView.Close();
            await SwipeContent.ScaleYTo(1, 300, Easing.SinOut);
        }
});

您的布尔值将在订阅的IsMenuOpen 参数中获取。仅在 MessagingCenter 内具有本地范围。

让我知道它是否工作正常......

【讨论】:

  • 这些是 MessagingCenter 的有用提示,但它们实际上对解决问题没有帮助...我的问题是 MessagingCenter 按预期工作并且动画方法被调用,但即使没有动画也不会发生ScaleToY 方法被调用。
  • 我刚刚看到了,在你的if else 中都有相同的操作wipeContent.ScaleYTo(1, 300, Easing.SinOut);
  • 是的,它们是相同的操作,但这不是问题,问题是无论if else 的哪个部分发生,根本没有动画发生
【解决方案2】:

await SwipeContent.ScaleYTo(1, 300, Easing.SinOut);

ScaleTo方法获取动画开始时当前的Scale属性值(默认值为1),然后从该值缩放到它的第一个参数,1似乎意味着没有变化,而您尝试将其更改为不是1 的值。

喜欢:

await SwipeContent.ScaleYTo(1.5, 300, Easing.SinOut);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-06
    • 2012-12-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多