Xamarin. Формирует, как менять тему в зависимости от времени суток. - PullRequest
0 голосов
/ 02 марта 2020

У меня есть такой сценарий: есть две темы: Светлая и Темная. У меня есть привязка от viewmodel, какую тему добавить. Я просто не знаю, как получить время от устройства и организовать. Мне нужно после 7 вечера каждый день менять тему на Темный, по умолчанию его Светлый. Как это организовать?

1 Ответ

1 голос
/ 02 марта 2020

Я предлагаю вам создать свойство в App.xaml.cs, в методах приложения Пуск / Возобновить, указать час дня, а затем в вашей ViewModel вы получите доступ к этому значению.

App.xaml.cs:

public bool IsDarkTheme;

public App()
{
    InitializeComponent();
    MainPage = new MainPage();
}

public void SetTheme()
{
    TimeSpan day = DateTime.Now.TimeOfDay;

    if (!(day.Hours < 19 && day.Hours > 6))
    {
        IsDarkTheme = true;
    }
}

protected override void OnStart()
{
    // Handle when your app starts
    SetTheme();
}

protected override void OnSleep()
{
    // Handle when your app sleeps
}

protected override void OnResume()
{
    // Handle when your app resumes
    SetTheme();
}

Примечание: если пользователь открыл приложение до 7 вечера и возобновил его после, и вы хотите, чтобы страница, которая была возобновлена, сменила внешний вид, вам нужно будет добавить это к страниц (если вы это сделаете, вам больше не нужно определять значение в конструкторе ViewModel):

На страницах xaml.cs:

protected override void OnAppearing()
{
    ((TheViewModelAssociated)BindingContext).TheViewModelProperty = App.IsDarkTheme;
    base.OnAppearing();
}

Ваш ViewModel вы получаете доступ к нему, как это :

App.IsDarkTheme
...