开始时间
10:24 2010-9-29
环境:
开发环境:VS2008 +XAML2CPP.EXE + SWE 2 + BLEND 2
运行环境:WINCE 6.0 R3
硬件加速: DirectX
随笔写作过程说明:
一边写代码,一边看MSDN,一边GOOGLE,一边用记事本 将此过程当中的问题,灵感,记录下来。
参考资料:
PAGE:
http://msdn.microsoft.com/en-us/library/ee501893.aspx
http://msdn.microsoft.com/en-us/library/ee501852.aspx
资源其分为:
局部资源
作用范围:作用于单个XAML
定义格式:定义在用户控件当中
<UserControl.Resources>
。。。
</UserControl.Resources>
全局资源
作用范围:作用于整个项目的所有XAML文件
定义格式:定义在APP.XAML当中
<Application.Resources>
。。。
</Application.Resources>
操作示例
局部资源的使用
在PAGE.XAML 定义了一个用户控件:MediaPlayer
先讲一下示例代码,然后再解释:
要求完成功能:改变字体的颜色
要求使用BrushForeground资源来设置文本BUFFERING 的Forground.
如图:
先:
后:
代码:
IXRResourceDictionary* Resources;
this->MediaPlayer->GetResources(&Resources);
IXRBrush* brush;
Resources->GetItem( L"BrushForeground", &brush);
this->BufferBlock->SetForeground(brush);
全局资源的使用
要求使用lrcBK资源来设置文本BUFFERING 的Forground.
效果图
步骤:
1. 一个加载APP.XAML文件。
2. 得到管理资源的对象。
3. 通过相应资源的KEY访问对象,以得到资源VALUE.
代码:
IXRResourceDictionary* pResourceDictionary;
XRXamlSource Source;
Source.SetResource(hInstance,TEXT("XAML"),IDR_XAML_App);
if(FAILED(retcode = app->LoadResourceDictionary(&Source, &pResourceDictionary)))
return retcode;
if(FAILED(retcode = app->GetResourceDictionary(&pResourceDictionary)))
return retcode;
this->pGlobalResourceDictionary->GetItem( L"lrcBK", &brush);
this->BufferBlock->SetForeground(brush);
理论部分:
资源部分
IXRResourceDictionary 其是用户管理资源的,从其的命名当中,可以知道MS的SWE开发使用词典来表达与存储资源。注意:词典当中存储的是资源对象,而不是资源对象的值,访问是通过在XAML当中定义的x:Key。
如:
<SolidColorBrush x:Key="BrushForeground" Color="#FF00B1E7"/>
当XAML RUNTIME( xaml的解析引擎)解析此名的时候,其是会生成一个对象 IXRSolidColorBrush且用Color 的值来初始化IXRSolidColorBrush. 然后此对象与Key组成一对存放到词典(IXResourceDictionary)当中。
控件部分
MS的SWE开发人员对于界面所涉及到的控件是怎么样处理的呢,界面当中的控件之间是存在一种一对多的关系,使用树形结构来表达与实现。
IXRVisualHost,其是用于管理总个界面的UI控件。以后我们要访问整个界面的控件,都是要通过IXRVisualHost。
控件与资源部分
资源是为控件使用而存在的。一个控件其是可以有许多的资源的,其之间存在一种一对多的关系,MS的SWE开发人员:其使用一个专业对象:IXResourceDictionary来管理资源,而控件只要管理IXResourceDictionary就可以了,其之间使用了组合模式,控件对象当中包含IXResourceDictionary的引用,以后我们是通过此引用来访问控件所拥有的资源。
访问控件与资源的方式
我们要访问资源,其是要通过IXResourceDictionary,IXResoureDictionary其是可以用来访问资源的。如我们访问一个控件的资源,或为这个控件添加新的资源。
操作步骤:
1. 得到控件的对象
2. 得到控件对象当中的IXResourceDictionary的引用。
3. 通过IXResourceDictionary 来完成对象的操作。
小结
MS的SWE开发人员其对于界面的设计是怎么样思考的。
是怎么样处理
控件与控件之间的关系
资源与资源之间的关系
控件与资源之间的关系
其又是使用了什么样的设计模式与数据结构。
缩写
SWE : Silverlight for windows embedded
源代码
我已经在”基于Silverlight 的文件浏览器“的随笔当中,上传了一个同样的版本。