原文: 2、演示“ResourceDictionary”相关知识点Resource/ResourceDictionary1.xaml 3、演示如何加载并使用外部的 ResourceDictionaryResource/RemoteResource.xaml OK
背水一战 Windows 10 (11) - 资源: CustomResource, ResourceDictionary, 加载外部的 ResourceDictionary 文件
作者:介绍背水一战 Windows 10 之 资源 - CustomResource
- ResourceDictionary
- 加载外部的 ResourceDictionary 文件
/* * 本例是一个自定义 CustomXamlResourceLoader,用于演示 CustomResource 的使用 */using Windows.UI.Xaml.Resources;namespace Windows10.Resource{ // 如果要在 xaml 中使用 CustomResource,那么需要在 C# 端自定义一个 CustomXamlResourceLoader public class CustomResourceTest : CustomXamlResourceLoader { ////// 返回 xaml 中的 CustomResource 请求的资源 /// /// xaml 端的 CustomResource 中的 ResourceKey /// 使用了 CustomResource 的对象类型 /// 使用了 CustomResource 的属性名称 /// 使用了 CustomResource 的属性类型 ///返回指定的资源 protected override object GetResource(string resourceId, string objectType, string propertyName, string propertyType) { return $"resourceId: {resourceId}, objectType: {objectType}, propertyName: {propertyName}, propertyType: {propertyType}"; } }}
Resource/CustomResourceDemo.xaml
Resource/CustomResourceDemo.xaml.cs
/* * 演示“CustomResource”相关知识点 */using Windows.UI.Xaml.Controls;using Windows.UI.Xaml.Resources;namespace Windows10.Resource{ public sealed partial class CustomResourceDemo : Page { public CustomResourceDemo() { // 这是必须的,需要先要指定当前使用的自定义 CustomXamlResourceLoader 实例 CustomXamlResourceLoader.Current = new CustomResourceTest(); this.InitializeComponent(); } }}
#FFFF0000
Resource/ResourceDictionary2.xaml
#FF00FF00
Resource/ResourceDictionary3.xaml
#FF0000FF
Resource/ResourceDictionaryDemo.xaml
#FFFFA500
Resource/ResourceDictionaryDemo.xaml.cs
/* * 演示“ResourceDictionary”相关知识点 */using System;using Windows.UI.Xaml;using Windows.UI.Xaml.Controls;using Windows.UI.Xaml.Media;namespace Windows10.Resource{ public sealed partial class ResourceDictionaryDemo : Page { public ResourceDictionaryDemo() { this.InitializeComponent(); this.Loaded += ResourceDictionaryDemo_Loaded; } private void ResourceDictionaryDemo_Loaded(object sender, RoutedEventArgs e) { // 实例化一个 ResourceDictionary ResourceDictionary rd = new ResourceDictionary { Source = new Uri("ms-appx:///Resource/ResourceDictionary3.xaml", UriKind.Absolute) }; // 将指定的 ResourceDictionary 集成到 Page.Resources 内的资源字典中 this.Resources.MergedDictionaries.Add(rd); // 使用上面集成进来的资源字典中的资源 textBlock4.Foreground = (SolidColorBrush)this.Resources["BrushBlue"]; /* * 上面的例子演示的是如何处理指定的 FrameworkElement 中的资源 * 如果需要处理 application 级的资源的话,可以通过 Application.Current.Resources 来获取 application 级的资源(对应的 xaml 为 App.xaml) */ } private void btnGetResourceValue_Click(object sender, RoutedEventArgs e) { // 获取 application 级的指定资源的值 lblMsg.Text = "SystemAccentColor: " + Application.Current.Resources["SystemAccentColor"].ToString(); lblMsg.Text += Environment.NewLine; // 获取指定 ResourceDictionary 中的指定资源的值 lblMsg.Text += "Page.Resources 中的 ColorRed 的值: " + this.Resources["ColorRed"].ToString(); lblMsg.Text += Environment.NewLine; // 获取指定 ResourceDictionary 中的指定资源的值 ResourceDictionary resourceDictionary1 = this.Resources.MergedDictionaries[0]; lblMsg.Text += "Page.Resources.MergedDictionaries[0] 中的 ColorRed 的值: " + resourceDictionary1["ColorRed"].ToString(); } }}
#FFFFA500
Resource/RemoteResource.xaml.cs
/* * 演示如何加载并使用外部的 ResourceDictionary */using System;using Windows.UI.Xaml;using Windows.UI.Xaml.Controls;using Windows.UI.Xaml.Markup;using Windows.UI.Xaml.Media;using Windows.Web.Http;namespace Windows10.Resource{ public sealed partial class RemoteResource : Page { // 需要加载的 ResourceDictionary 的 http 地址 string resourceDictionaryUrl = "http://localhost:44914/xaml/ResourceDictionary.txt"; public RemoteResource() { this.InitializeComponent(); } private async void btnLoadRemoteResource_Click(object sender, RoutedEventArgs e) { // 下载远程的 ResourceDictionary 文件 HttpClient client = new HttpClient(); string resourceDictionaryString = await client.GetStringAsync(new Uri(resourceDictionaryUrl, UriKind.Absolute)); // 将字符串转换为 ResourceDictionary 对象 ResourceDictionary resourceDictionary = XamlReader.Load(resourceDictionaryString) as ResourceDictionary; // 将指定的 ResourceDictionary 集成到 Page.Resources 内的资源字典中 this.Resources.MergedDictionaries.Add(resourceDictionary); // 使用远程 ResourceDictionary 中的资源 textBlock.Foreground = (SolidColorBrush)this.Resources["BrushGreen"]; } }}
http://localhost:44914/xaml/ResourceDictionary.txt
#FF00FF00
posted on 2017-09-21 09:37 阅读( ...) 评论( ...)