博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
背水一战 Windows 10 (11) - 资源: CustomResource, ResourceDictionary, 加载外部的 ResourceDictionary 文件...
阅读量:5314 次
发布时间:2019-06-14

本文共 6496 字,大约阅读时间需要 21 分钟。

原文:

背水一战 Windows 10 (11) - 资源: CustomResource, ResourceDictionary, 加载外部的 ResourceDictionary 文件

作者:
介绍
背水一战 Windows 10 之 资源

  • CustomResource
  • ResourceDictionary
  • 加载外部的 ResourceDictionary 文件

示例
1、演示“CustomResource”相关知识点
Resource/CustomResourceTest.cs

/* * 本例是一个自定义 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();        }    }}

2、演示“ResourceDictionary”相关知识点
Resource/ResourceDictionary1.xaml

#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();        }    }}

3、演示如何加载并使用外部的 ResourceDictionary
Resource/RemoteResource.xaml

#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

OK

posted on
2017-09-21 09:37 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/lonelyxmas/p/7566886.html

你可能感兴趣的文章
shell习题第16题:查用户
查看>>
python脚本检查TCP端口是否正常
查看>>
梯度下降法与方向导数
查看>>
实验4 [bx]和loop的使用
查看>>
Redis常用命令
查看>>
Handler消息传递机制
查看>>
linux 查看系统信息
查看>>
2018.08.22 NOIP模拟 shop(lower_bound+前缀和预处理)
查看>>
2018.11.06 bzoj1040: [ZJOI2008]骑士(树形dp)
查看>>
2019.02.15 bzoj5210: 最大连通子块和(链分治+ddp)
查看>>
redis cluster 集群资料
查看>>
Junit使用教程(一)
查看>>
Python接口测试-使用requests模块发送post请求
查看>>
混合模式程序集是针对“v2.0.50727”版的运行时生成的,在没有配置其他信息的情况下,无法在 4.0 运行时中加载该程序集。...
查看>>
jQuery总结或者锋利的jQuery笔记二
查看>>
前后端协作--服务器渲染与前后端分离
查看>>
微软职位内部推荐-Sr. SE - Office incubation
查看>>
微软职位内部推荐-SOFTWARE ENGINEER II
查看>>
GDB调试
查看>>
centos系统python2.7更新到3.5
查看>>