簡體   English   中英

Xamarin - 如何使用 MessagingCenter 觸發動畫

[英]Xamarin - How to trigger an animation using a 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, 300, Easing.SinOut);
    }
});

此動畫與我在同一文件上的其他事件偵聽器中的動畫相同,並且工作正常。 然而,在MessagingCenter中,執行鏈工作正常,它調用動畫方法但沒有動畫發生。

這可能是線程問題嗎? 我試過awaitBeginInvokeOnMainThread但都沒有奏效。

嘗試做一些這樣的事情,希望它會有所幫助。

用於 SEND 的消息中心

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);
        }
});

您的 bool 值將在 subscribe 的IsMenuOpen參數中獲取。 這將僅在 MessagingCenter 內具有本地范圍。

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

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

ScaleTo方法獲取動畫開始時的當前Scale屬性值(默認值為 1),然后從該值縮放到它的第一個參數, 1似乎意味着沒有變化,您嘗試將其更改為一個值不是1

喜歡:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM