xamarin.forms - 源只能从 xaml 设置

标签 xamarin.forms

我正在以编程方式设置 ResourceDictionary 的源属性,而不是从 Xamarin 表单项目中的 xaml 设置。

在运行时,我总是收到 System.invalidOperation 异常消息“Source can only be set from Xaml.

Resources = Resources ?? new ResourceDictionary();
    if(Resources.Source == null)
                {
                    Resources.Source = new Uri("/Styles/ActiveTrackerStyle.xaml", UriKind.Relative);
                }

想知道我在设置源时是否做错了什么。 Source 属性同时具有 getter 和 setter。这里有什么问题的任何指示。

最佳答案

在同事的帮助下,我让它工作了:

首先:浏览 Xamarin.Forms 的 ResourceDictionary 类 ( here ),我看到了以下属性:

public Uri Source {
            get { return _source; }
            set {
                if (_source == value)
                    return;
                throw new InvalidOperationException("Source can only be set from XAML."); //through the RDSourceTypeConverter
}

如果已经设置了私有(private)变量“_source”,则似乎无法更改源;

但是,该类还有另一个方法“SetAndLoadSource”,在这个方法中,_source 变量的设置没有任何检查。因此,我通过执行以下操作让它工作:

var source = new Uri("/Styles/LightResourceDictionary.xaml", UriKind.RelativeOrAbsolute);
var resourceDictionary = new ResourceDictionary();
resourceDictionary.SetAndLoadSource(source, "Styles/LightResourceDictionary.xaml", this.GetType().GetTypeInfo().Assembly, null);
ThemeDictionary.MergedDictionaries.Add(resourceDictionary);
ThemeDictionary.MergedDictionaries.ElementAt(0).Source = source;

请注意,“ThemeDictionary”是我的 MergedDictionary 的 x:Name:

<ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary x:Name="ThemeDictionary">
                <ResourceDictionary.MergedDictionaries>
                    <ResourceDictionary Source="Styles/DarkResourceDictionary.xaml"/>
                </ResourceDictionary.MergedDictionaries>
            </ResourceDictionary>
        </ResourceDictionary.MergedDictionaries>
      </ResourceDictionary>

关于xamarin.forms - 源只能从 xaml 设置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50651949/

相关文章:

visual-studio-2015 - 无法在 xamarin.Forms 可移植项目中使用 WebClient

ios - 物理尺寸 Iphone XS Max 和 Iphone XR 屏幕

xamarin.forms - 无需重新定位即可解决 xamarin android "path too long"

xamarin.ios - 自Xamarin.Forms 2.3.4版通过TestFlight分发后,iOS App崩溃

c# - 通过 SSL 保护 Xamarin.Forms 应用程序流量

c# - Xamarin 固定导航栏

c# - 如何使用 Xamarin Forms Shell 在 iOS 中的 Tabbar 行和图标之间添加空格?

xamarin - 如何在Xamarin中的XAML中设置选项卡式页面的内容页面?

xamarin - Xamarin 表单中运行时的相机和位置权限

c# - DateTime.ToString(String, IFormatProvider) 不适用于 Xamarin.Forms 中的波斯语 CultureInfo "fa-IR"