Xamarin.Forms我如何从另一个CS文件访问公共功能?

时间:2018-11-28 15:07:15

标签: c# xamarin xamarin.forms xamarin.android

因此,我是XF的新手,我想知道Android上的AppState / Activity生命周期。 此代码正下方的代码位于名为test.xaml.cs的文件中。

声音的工作原理是您可以说startSound.Play()startSound.Stop()之类的声音来启动或停止应用中的声音。我注意到有一个错误,当该应用程序的其余部分通过“后退”按钮重置时,它不会停止声音(即使它保留在内存中?)

public Test()
    {
        startSound = CrossSimpleAudioPlayer.CreateSimpleAudioPlayer();
        startSound.Load(Path.Combine($"Audio", "startBeep.wav"));

        stopSound = CrossSimpleAudioPlayer.CreateSimpleAudioPlayer();
        stopSound.Load(Path.Combine($"Audio", "stopBeep.wav"));

        winSound = CrossSimpleAudioPlayer.CreateSimpleAudioPlayer();
        winSound.Load(Path.Combine($"Audio", "winBeep.wav"));

        endSound = CrossSimpleAudioPlayer.CreateSimpleAudioPlayer();
        endSound.Load(Path.Combine($"Audio", "endBeep.wav"));

        addSound = CrossSimpleAudioPlayer.CreateSimpleAudioPlayer();
        addSound.Load(Path.Combine($"Audio", "addBeep.wav"));
    }

我想做的是在app.xaml.cs文件中进入受保护的override void OnSleep()并写入startSound.stop();,以便在应用程序睡眠时停止声音。但是,我不知道如何在Test中访问test.xaml.cs的公共功能。

这是app.xaml.cs

的代码行
protected override void OnSleep()
    {
        Debug.WriteLine("OnSleep");
        // Handle when your app sleeps
    }

我已经使用调试来确保应用程序状态更改,因此我知道OnSleep()可以正常工作。

1 个答案:

答案 0 :(得分:1)

您可以使用MessagingCenter完成此操作。

  

Xamarin.Forms MessagingCenter使视图模型和其他组件可以进行通信,而无需通过简单的Message合同来了解彼此。

只需在OnSleep的{​​{1}}中发送一条消息,然后在App上订阅该消息:

在您的OnSleep中:

Test

在测试中:

MessagingCenter.Send<App>(this, "OnSleep");

HIH

相关问题