Xamarin Forms IOS 13 UIUserInterfaceStyle - Темный режим - PullRequest
0 голосов
/ 25 сентября 2019

Как я могу сделать свое приложение отзывчивым с этой "НОВОЙ ФУНКЦИЕЙ".Я хочу иметь только легкий режим пока.Я видел это

UIUserInterfaceStyle style = UIUserInterfaceStyle.Light;

Как активировать это в моем приложении Xamarin Forms

1 Ответ

1 голос
/ 25 сентября 2019

Вы можете реагировать на изменения в стиле пользовательского интерфейса, создав два ресурса: LightTheme и DarkTheme (они будут ResourceDictionaries).Внутри них вы можете добавить собственные цвета.Например:

LightTheme.xaml:

<ResourceDictionary
    xmlns="http://xamarin.com/schemas/2014/forms"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
    x:Class="DarkMode.Styles.LightTheme">

    <Color x:Key="background">#FFFFFF</Color>
    <Color x:Key="mainLabel">#000000</Color>

</ResourceDictionary>

DarkTheme.xaml:

<ResourceDictionary
    xmlns="http://xamarin.com/schemas/2014/forms"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
    x:Class="DarkMode.Styles.DarkTheme">

    <Color x:Key="background">#000000</Color>
    <Color x:Key="mainLabel">#FFFFFF</Color>

</ResourceDictionary>

Затем необходимо создать CustomRenderer для элемента ContentPage (конечно, только для iOS):

[assembly: ExportRenderer(typeof(ContentPage), typeof([YOUR_NAMESPACE].iOS.Renderers.PageRenderer))]
namespace [YOUR_NAMESPACE].iOS.Renderers
{
  public class PageRenderer : Xamarin.Forms.Platform.iOS.PageRenderer
  {
    protected override void OnElementChanged(VisualElementChangedEventArgs e)
    {
      base.OnElementChanged(e);

      if (e.OldElement != null || Element == null)
          return;

      try
      {
          SetTheme();
      }
      catch(Exception ex)
      {

      }
    }

    public override void TraitCollectionDidChange(UITraitCollection previousTraitCollection)
    {
        base.TraitCollectionDidChange(previousTraitCollection);

        if (TraitCollection.UserInterfaceStyle != previousTraitCollection.UserInterfaceStyle)
            SetTheme();
    }

    private void SetTheme()
    {
        if (TraitCollection.UserInterfaceStyle == UIUserInterfaceStyle.Dark)
            App.Current.Resources = new DarkTheme();
        else
            App.Current.Resources = new LightTheme();
    }
  }
}

Дополнительная информация .

...