当前位置: 首页 > 编程语言 > C#

是否可以在Xamarin.Forms中将颜色资源指向另一个颜色资源?分享

时间:2023-04-10 15:30:11 C#

是否可以在Xamarin.Forms中将一个Color资源指向另一个Color资源?我正在构建一个XamarinForms应用程序,我目前正在绘制我的应用程序资源,主要是我的颜色。例如,我有以下内容:#404040#458623#458623如您所见,我的SelectedItemColour与蓝色相同。我尝试了以下方法,但没有用:#404040#458623我知道WPF是否可以执行此处所述的答案是否可以将颜色资源指向Xamarin.Forms中的另一个颜色资源?您可以将x:Static与静态类结合使用,以按名称直接引用这些颜色。这样做的好处是可以将颜色集中在一个类中并最大限度地减少XAML的数量。namespaceResourceColors{publicstaticclassColors{publicstaticColorSlate=Color.FromHex("#404040");}}#458623所以我必须这样做的方式非常复杂,所以仔细听。我发现这里真正的问题是我需要为我的Xamarin.Forms应用程序设置“主题”。这就是我所做的。首先做了一个抽象的Theme类:publicabstractclassTheme{publicDictionaryColors{get;放;}=新字典();protectedvoidDictionaryThemes(Typetype){varproperties=type.GetRuntimeProperties();foreach(PropertyInfopropInfoinproperties){if(propInfo.PropertyType==typeof(Color)){varkey=propInfo.Name;varvalue=propInfo.GetValue(this);颜色。添加(键,(颜色)值);}}}publicabstractColorTitleColour{get;使用反射填充充满我的资源的字典然后我用我的实际主题扩展这个类:publicclassMyTheme:Theme{publicMyTheme(){DictionaryThemes(typeof(MyTheme));}//SlatepublicoverrideColorTitleColour{get;}=Color.FromHex("#00ff00");}还在?好的......然后我必须将这个主题加载到我的应用程序资源中并将它与我的其他应用程序资源合并。我必须将MyTheme资源与其他资源分开,以便稍后在我的主资源文件中使用它。让我告诉你,这是我的CurrentTheme资源文件:我必须将它作为页面的一部分,因为Xamarin.Forms已经密封了ResourceDictionary类(参见此处),这意味着你不能扩展它并创建你自己的......耻辱。无论如何我离题了。然后我将我的应用程序资源设置为CurrentTheme,如下所示:varcurrentTheme=newCurrentTheme();Xamarin.Forms.Application.Current.Resources=currentTheme.Resources;然后我可以从我的主要资源文件中合并其他样式,在这个例子中称为样式:我将它合并到我的主要应用程序资源中,如下所示varstyles=newStyles();foreach(variteminstyles.Resources){Application.Current.Resources.Add(item.Key,item.Value);现在您可以看到Styles类中的一个setter属性如下所示:这个值是什么意思?这是拼图的最后一块。允许您像上面那样定义xaml的扩展方法。首先是ColourExtension类://在Xaml标记[ContentProperty("Text")]中使用时排除'Extension'后缀publicclassColourExtension:IMarkupExtension{publicstringText{get;放;}publicobjectProvideValue(IServiceProviderserviceProvider){if(Text==null)thrownewException("NoColorKeyProvided");返回StylingLookup.GetColour(文本);最后是StylingLookup类:返回currentTheme.Colours[key];现在一切都明白了,为什么我们必须将CurrentTheme从主Styles资源中分离出来。因为这一行:varcurrentTheme=(Application.Current.Resources["CurrentTheme"]asTheme);如果有人有更好的方法来设置应用程序的样式,我很想听听。颜色资源指向Xamarin.Forms中的另一个颜色资源?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处: