《Programming WPF》翻译 第6章 1.创建和使用资源

资源这个词具有非常广泛的意义。任何对象都可以是一个资源。一个在用户 界面中经常使用的Brush或者Color可以是一个资源。一段文本或者一个图形也可 以是一个资源。没有什么特殊的对象不可以成为一个资源。资源的底层处理机制 确保了获取你所需要的资源成为可能,而不闭关心这个资源是什么;同时,这套 机制可以简单的识别和定位对象。

资源管理的核心是ResourceDictionary这个类。这是一个相当简单的集合类 ,就像一个普通的Hashtable,允许以关键字聚合对象,同时提供一个索引器, 从而获取到使用了这些关键字的对象。因此,原则上,使用ResourceDictionary 就像使用一个Hashtable一样,正如范例6-1所示:

示例6-1

ResourceDictionary myDictionary = new ResourceDictionary( );
myDictionary.Add("Foo", "Bar");
myDictionary.Add("HW", "Hello, world");

Console.WriteLine (myDictionary["Foo"]);
Console.WriteLine(myDictionary["HW"]);

实际上,没有必要如此创建一个ResourceDictionary对象。代替的,你可以 正常

使用由WPF提供的一些资源字典。例如,FrameworkElement基类——用户界面 的大部分元素都从中派生,对外暴露一个名为Resources的属性,这就是一个资 源字典。此外,在Xaml标记中,也可以看到这些资源字典的,正如示例6-1所示 :

示例6-2

<?Mapping XmlNamespace="urn:System" ClrNamespace="System" Assembly="mscorlib" ?>

<Window x:Class="ResourcePlay.Window1" Text="ResourcePlay"
    xmlns="http://schemas.microsoft.com/winfx/avalon/2005"
    xmlns:x="http://schemas.microsoft.com/winfx/xaml/2005"
    xmlns:s="urn:System">

    <Window.Resources>
        <SolidColorBrush x:Key="Foo" Color="Green" />
        <s:String x:Key="HW">Hello, world</s:String>
    </Window.Resources>

    <Grid Name="myGrid">
    </Grid>
</Window>

x:Key这个属性指定了资源字典中的关键字。原则上,你可以使用任何类型的 对象作为关键字,然而实际上,String是最普遍的选择,尽管资源字典中使用的 是存储在公有属性中的截然不同的对象实例。

当使用xaml导入资源字典时,WPF可能会选择推迟资源的生成。在特定的环境 下,这种做法可以使得xaml资源树的一部分仍然以二进制形式(BAML)存在。只 有在需要的时候,才会还原这部分需要的资源。如果在界面出现时并不需要所有 的对象,这样做可以明显加快用户界面的启动时间。除了加快速度,这种优化在 极大程度上对代码行为并没有直接的效果。尽管如此,如果你的xaml标签出错了 ,因延迟创建而产生的错误,其浮现的时间可能会超过你的预计。

#译者注:微软推荐XAML被编译成BAML(Binary Application ...二进制语言 程序标记语言)。

示例6-3展示了如何获取示例6-2中定义的资源

时间: 2024-11-08 17:35:21

《Programming WPF》翻译 第6章 1.创建和使用资源的相关文章

《Programming WPF》翻译 第8章 5.创建动画过程

所有在这章使用xaml举例说明的技术,都可以在代码中使用,正如你希望的.可是,代码可以使用动 画在某种程度上不可能在xaml中实现的. 在代码中创建动画需要稍微多一点的努力--比使用标记.然而,代码提供了更多的弹性.你可以在 运行期计算属性,而不是在xaml中硬编码,从而支持你的动画适应环境.例如,这可能是有用的--在当 前窗体的大小基于动画的参数. 使用代码一个额外的好处是我们不需要使用storyboard,替代的,我们可以创建一些被称为"本地动 画"的对象."本地动画&q

《Programming WPF》翻译 第6章 3.二进制资源

尽管ResourceDictionary和系统级别的资源适合于作为数据存在于对象中, 然而,并不是所有的资源都能很好的满足这个模型.能够处理二进制流通常是很 有用的.例如,图像,声频和视频,都是有效地二进制的代表,但是这些资源在 xaml内都没有相应的标签,而且毕竟这些对象通常表现为底层数据的包装.标记 语言本身代表了一种挑战:xaml页面必须编译到我们的应用程序中.因此,需要 一种处理二进制流的方法. WPF并未引进任何新技术处理二进制数据..NET框架已经提供了处理内嵌二进 制流的机制,WP

《Programming WPF》翻译 目录

原文:<Programming WPF>翻译 目录 注:第1.2章我只做了笔记,没有翻译,请大家阅读时注意. 还有就是,这本书的英文版本下载:[O'Reilly] Programming Windows Presentation Foundation (2005) - BBL 以下是这本书的目录: 1.Hello, WPF     1.1 WPF from Scratch 基础     1.2 Navigation 导航     1.3 属性元素     1.4 布局     1.6 数据绑定

《JavaScript构建Web和ArcGIS Server应用实战》——第2章 创建地图和添加图层2.1 简介

第2章 创建地图和添加图层 通过前一章的学习,我们已经掌握了关于HTML.CSS和JavaScript的一些基础知识.接下来我们将正式开始学习如何去创建一些很好的GIS Web应用程序.在本章中,我们将会为大家介绍关于如何创建地图并在地图上添加图层形式信息的一些基础概念. 本章中将包含如下主题. ArcGIS API for JavaScript 沙盒. 使用ArcGIS API for JavaScript创建应用程序的基本步骤. 更多关于地图的介绍. 使用地图服务图层. 切片地图服务图层.

wpf为何在c#代码里创建了Button对象在调试时就出错要我去创建Button?

问题描述 wpf为何在c#代码里创建了Button对象在调试时就出错要我去创建Button? Button[] btn = new Button[35]; for (int i = 0; i < 35; i++) { for (int j = 1; j < 6; j++) for (int h = 0; h < 7; h++) { btn[i].Padding = new Thickness(28, 10,28,10); btn[i].FontSize = 26; btn[i].Fore

Knockout应用开发指南 第五章:创建自定义绑定

原文:Knockout应用开发指南 第五章:创建自定义绑定 创建自定义绑定 你可以创建自己的自定义绑定 – 没有必要非要使用内嵌的绑定(像click,value等).你可以你封装复杂的逻辑或行为,自定义很容易使用和重用的绑定.例如,你可以在form表单里自定义像grid,tabset等这样的绑定. 重要:以下文档只应用在Knockout 1.1.1和更高版本,Knockout 1.1.0和以前的版本在注册API上是不同的.   注册你的绑定 添加子属性到ko.bindingHandlers来注册

《Oracle PL/SQL程序设计(第5版)》一一第2章 创建并运行PL/SQL代码

第2章 创建并运行PL/SQL代码 Oracle PL/SQL程序设计(第5版)即便一个PL/SQL程序员从来不重视系统设计或者单元测试这样的任务,他也必须熟悉下面这些最基本的操作: 在数据库中导航:创建和编辑PL/SQL源代码:编译PL/SQL源代码,修正编译器发现的代码错误(或者,可选的,处理警告信息):在某些环境下运行编译后的程序:检查程序执行结果(可能是从屏幕上的输出,或者是根据表中的数据变化,等等).PL/SQL是寄生在Oracle执行环境中的(因此说它是"嵌入式语言"),这

《Python数据可视化编程实战》—— 第 5 章 创建3D可视化图表

第 5 章 创建3D可视化图表 Python数据可视化编程实战本章将学习以下内容. 创建3D柱状图创建3D直方图在matplotlib中创建动画用OpenGL制作动画

C#创建和使用资源文件

创建 创建资源文件    资源文件顾名思义就是存放资源的文件.资源文件在程序设计中有着自身独特的优势,他独立于源程序,这样资源文件就可以被多个程序使用.同时在程序设计的时候,有时出于安全或者其他方面因素的考虑,把重要东西存放在资源文件中,也可以达到保密.安全的效果.那么Visual C#所使用的资源文件中到底存放哪些东西呢?在用Visual C#创建资源文件大致可以存放三种类型的数据资源,分别是字节数组.各种对象和字符串.本文将结合一个程序例子来具体说明用Visual C#是如何创建资源文件的.