- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在以编程方式设置 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/
有一条(相对)众所周知的 Perl 公理:“只有 Perl 可以解析 Perl”。我想知道 Perl 6 是否仍然如此? 扩大讨论...考虑到 PyPy 最近的更新,我想到了这个问题。 Perl 独特
这是设置。在上一个问题中,我发现我可以通过子组件中的状态传递对象属性,然后使用 componentDidUpdate 获取该对象属性。在这种情况下,状态和属性都称为到达。 这是基本代码... expo
我运行的是 10.5.2 社区版。我已经标记了 源/主要/资源 作为源目录。我可以右键单击并“编译”某些文件,据我所知,这意味着 IDE 将文件复制到与发送类文件的“com.mydomain.pack
我是一名优秀的程序员,十分优秀!