Silverlight中使用资源

本文详细介绍了在XAML中通过ResourceDictionary管理资源的方法,包括资源的定义、检索、合并以及如何在不同层级间引用资源。重点讨论了样式、模板、颜色、动画、效果等对象的资源设置,并阐述了资源键、检索顺序和外部资源的引入过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

资源字典是一个受 ResourceDictionary 类支持的概念。SL中所说的资源通常就是指资源字典,而非.resx资源。

 

哪些对象可以设置为资源:

  • 样式和模板。
  • 画笔和颜色。
  • 故事板动画。
  • 变换效果。
  • Matrix、Matrix3D 和 Point
  • 某些具有可设置和可构造属性的其他结构,如 Thickness 和 CornerRadius(但是,这些结构通常要求在 XAML 中使用初始化文本以便声明有用值
  • 在支持代码中定义然后在 XAML 中实例化为资源的自定义类型,如资源的转换器。
  • 字符串和基本数值,如 double 和 int。

资源键:

x:Key是推荐使用的资源键设置语法,在SL以前版本中也可以使用x:Name来设置

FrameworkElement.Resources 和 Application.Resources

SL中提供了页面或控件级别的资源,及应用程序级别资源,这样两类资源设置。注意:.Resources属性返回的就是ResourceDictionary类实例。

 

资源如何被检索到

资源的消费者会首先检查自身的资源,然后是父级的,直到是页面级的,最后是Application级的。一旦检索到,就停止继续检索。

 

合并资源字典

合并这个概念,记住:不是Copy and paste 把资源都放到一起,而是指把某些资源合并入可被检索的序列中。那么既然各级别资源都可以按照次序被自动检索,为什么还要合并呢?答案就在于从SL3.0开始可以使用单独的资源文件来定义资源。默认的检索序列中当然是不会自动去检索这些外部资源档。所以要使用这些外部资源档就需要把它并入到SL运行时的资源检索序列中来。

 

<Grid>

  <Grid.Resources>

    <ResourceDictionary>

      <SolidColorBrush Color="#d0157820" x:Key="muddyBrush"/>

      <ResourceDictionary.MergedDictionaries>

        <ResourceDictionary Source="/rd1.xaml">

        <ResourceDictionary Source="/rd2.xaml">

      </ResourceDictionary.MergedDictionaries>

    </ResourceDictionary>

  </Grid.Resources>

....

<Grid>

以上是SL SDK中的示例。 注意几个要点:

l   <ResourceDictionary> 之所以需要这个标签,是因为后面要使用<ResourceDictionary.MergedDictionaries>,这是ResourceDictionary对象的属性MergedDictionaries。正是用它来实现具体的外部资源档的引入。

l   <ResourceDictionary>内依然可以包含键控资源的定义,如:<SolidColorBrush Color="#d0157820" x:Key="muddyBrush"/>

l   <ResourceDictionary.MergedDictionaries>内引入的资源档,在合并之后,后被添加的外部资源档会先被检索,即采用后进先出。

l   合并以后的检索顺序是这样:资源消费对象本身的资源—-页面资源中的键控资源—-页面上合并入的外部资源---应用程序级别资源

 

应用程序资源和直接资源之间的引用

为应用程序定义的资源不能引用直接资源。这等效于尝试前向引用,因为应用程序资源实际上是最先处理的。但是,任何直接资源都可以引用应用程序资源

资源字典和 XamlReader.Load

使用XamlReader.Load()可以把一段Xaml标签文本让Xaml解析器来解析。在这段标签文本中,如果使用资源,要注意:所有用到的资源必须是在此段标签文本内以键控资源方式来定义的,因为在Xaml解析器解析这段文本的时候不会去检索这段标签文本之外的任何资源。

模板中的 StaticResource

模板在被定义为资源时,模板的定义和应用是分离的。这种情况下要注意:在模板定义中使用的StaticResource资源,必须是在定义的位置就能在资源检索序列中检索到所用的资源。例如在一个控件A上定义的资源,这个控件需要应用一个以资源方式定义的模板,那么在此模板的定义中,就不能使用到A上定义的资源。

 

在代码中引用资源

在代码中使用FrameworkElement.Resources来引用控件或页面资源;使用Application.Current 或 Application.Resources资源。 运行时可以向控件或页面资源(又称之为直接资源)或应用程序资源内添加资源项。

 

外部资源字典档案

l   外部资源字典档案以.xaml为扩展名

l   以<ResourceDictionary>为根元素

 

运行时加载资源字典档案

如果不采用设计时合并资源字典的方式,而是在运行时从代码中加载资源字典档案(使用 Load 以及应用程序服务中的从包加载 API 在运行时加载它),必须把这样加载的资源字典项加入到控件/页面,或应用程序的资源字典中。(例如在Application的StartUp事件处理中把运行时加载的外部资源加入到Application.Resources的资源字典中)

资源下载链接为: https://pan.quark.cn/s/d9ef5828b597 四路20秒声光显示计分抢答器Multisim14仿真源文件+设计文档资料摘要 数字抢答器由主体电路与扩展电路组成。优先编码电路、锁存器、译码电路将参赛队的输入信号在显示器上输出;用控制电路和主持人开关启动报警电路,以上两部分组成主体电路。通过定时电路和译码电路将秒脉冲产生的信号在显示器上输出实现计时功能,构成扩展电路。经过布线、焊接、调试等工作后数字抢答器成形。关键字:开关阵列电路;触发锁存电路;解锁电路;编码电路;显示电路 一、设计目的 本设计是利用已学过的数电知识,设计的4人抢答器。(1)重温自己已学过的数电知识;(2)掌握数字集成电路的设计方法和原理;(3)通过完成该设计任务掌握实际问题的逻辑分析,学会对实际问题进行逻辑状态分配、化简;(4)掌握数字电路各部分电路与总体电路的设计、调试、模拟仿真方法。 二、整体设计 (一)设计任务与要求: 抢答器同时供4名选手或4个代表队比赛,分别用4个按钮S0 ~ S3表示。 设置一个系统清除和抢答控制开关S,该开关由主持人控制。 抢答器具有锁存与显示功能。即选手按动按钮,锁存相应的编号,并在LED数码管上显示,同时扬声器发出报警声响提示。选手抢答实行优先锁存,优先抢答选手的编号一直保持到主持人将系统清除为止。 参赛选手在设定的时间内进行抢答,抢答有效,定时器停止工作,显示器上显示选手的编号和抢答的时间,并保持到主持人将系统清除为止。 如果定时时间已到,无人抢答,本次抢答无效。 (二)设计原理与参考电路 抢答器的组成框图如下图所示。它主要由开关阵列电路、触发锁存电路、解锁电路、编码电路和显示电路等几部分组成。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值