Xamarin在启动时会加载资源

时间:2018-11-09 21:36:55

标签: xamarin.forms

我有一个Xamarin Forms应用程序,带有用于Android和IOS的MvvmCross,我想添加一个深色主题。我的想法是必须使用词典来列出深色或浅色主题,并在启动时加载我需要的主题。

我在MvxApplication中注册了依赖项后添加了它:

        if (Mvx.IoCProvider.Resolve<ISettingsManager>().Theme == AppTheme.Dark)
        {
            Application.Current.Resources.Add(new ColorsDark());
        }
        else
        {
            Application.Current.Resources.Add(new ColorsLight());
        }

ColorsDarkColorsLight是我的ResourceDictionary。之后,我可以在Application.Current.Resources.MergedDictionaries下看到新的Dictionary,但是控件无法像看起来那样找到资源。但是,当我将其添加到App.xaml

时,它确实可以工作
      <ResourceDictionary Source="Style/ColorsDark.xaml" />

我是否必须将代码的另一部分移到其他地方,或者根本就是错误的方法?

2 个答案:

答案 0 :(得分:1)

个人根本不喜欢这种方法。我的工作:拥有一个静态类,其中包含所有在静态字段中定义的颜色,大小等。在应用启动或更改皮肤后重新加载应用时,只需为此用户界面定义静态类调用ex:UiSettings.Init(),如下所示:

public static class UiSettings
{       
      public static Init()
      {
            if (Settings.AppSettings.Skin=="butterfly")
            {
             ColorButton = Color.Blue;
             TitleSize= 12.0;
            }
            else
            if (Settings.AppSettings.Skin=="yammy")
            {
             ColorButton = Color.Red;
             if (Core.IsAndroid)
                ButtonsMargin = new Thickness(0.5,0.6,0.7,0.8);
            }
            // else just use default unmodified field default values 
        }

        public static Color ColorButton = Color.Green;
        public static Thickness ButtonsMargin = new Thickness(0.3,0.3,0.2,0.2);
        public static double TitleSize= 14.0;

}

在XAML使用示例中:

 Color= "{x:Static xam:UiSettings.ColorProgressBack}"

在代码使用示例中:

Color = UiSettings.ColorProgressBack;

更新: 请记住,如果您从不同的程序集中访问静态类,则可能会使用未发生Init()的默认值访问它的新副本,如果您也遇到这种情况,也可以从该程序集中调用Init()。 / p>

答案 1 :(得分:0)

如果您希望在应用程序加载时加载某些内容,则必须在App.xaml.cs中进行编码

ExtentProperties.INSTANCE

在这段代码中,我将设置所有页面的BackgroungImage。希望您能从这段代码中得到灵感。