【问题标题】:Reading XAML via string in Code behind Xamarin Forms通过 Xamarin 表单后面的代码中的字符串读取 XAML
【发布时间】:2017-04-06 16:26:03
【问题描述】:

我正在尝试在健全的项目中创建具有多个资源字典的 xamarin PCL 项目。

所有资源字典在不同屏幕的项目 XAML 文件中定义了相同的键(这些键被引用为动态资源),但每个资源字典中的值不同(目的是拥有单独的资源用于特定客户要求的字典)。

我能够在 App.Xaml 的代码后面使用

加载资源字典

Current.Resources = new ResourceDictionary(); Resources.MergedWith = typeof(Sales); // Sales.xaml 是一个资源字典。

现在我正在尝试从 App.config 传递资源字典的名称(使用 PCLAppConfig Nuget 包)并获取 XAML 文件的名称及其路径。

我无法像在 WPF 中那样使用 XAMLReader.Load 读取代码隐藏中的 XAML 文件

任何帮助将不胜感激。

【问题讨论】:

    标签: xamarin xamarin.android xamarin.forms app-config resourcedictionary


    【解决方案1】:

    每个 ResourceDictionary 都有自己的类型,例如销售。

    因此,如果您想根据名称获取类型,您可以通过反射获取类型。

    var nameFromConfig = "Sale"; // Change to get from your config file
    var type = Type.GetType(nameFromConfig);
    Current.Resources = new ResourceDictionary(); 
    Resources.MergedWith =  type;
    

    【讨论】:

    • 使用 Type.GetType(nameFromConfig) 的类型始终为空。我曾尝试在配置文件中使用 .xaml 和不使用该名称。文件路径也设置为正确。
    • 您需要使用该类型的完整命名空间。
    • 我仍然无法使用完整的命名空间获取类型名称。这是代码:- var fileName = ConfigurationManager.AppSettings["testkey"];字符串文件 = @"C:\Users\piyush.poddar\Documents\Visual Studio 2015\Projects\App3\App3\App3\App3." + 文件名; var type = Type.GetType(file); Current.Resources = new ResourceDictionary(); Resources.MergedWith = 类型; App.config 入口如下:-
    • 对于每个 XAML 文件,您还应该有代码,带有 InitializeComponent,要获得类型,您需要此代码隐藏类的完整命名空间,而不是文件路径。
    • 谢谢亚当。我现在可以使用完整命名空间来实现这一点。
    猜你喜欢
    • 2016-12-22
    • 1970-01-01
    • 2018-04-03
    • 2019-05-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-16
    • 1970-01-01
    相关资源
    最近更新 更多