Vista Media Center 开发之深入浅出 (四)
----- 也从“Hello World”说起
不论是学习任何一门编程语言,我们所学的第一个程序都是显示”Hello World”,从最早的C中的printf,到C++中的Cout<<,再到.net中的Console.Write,从Windows Form 中的MessageBox.Show到Web 中的alert、<%==%>。因此本人也不想破坏这个规矩,也从Hello World说起。
接下来,以一个“Hello 模版”(A project for creating a Windows Media Center Application containing the minimum code and markup required.)项目为基础项目,通过对其修改,实现用MCML直接显示、MCML调用Manage Code显示 “Hello World”的功能。
一个新建的“Hello 模版”项目包括如下一些内容:
其中只有Default.mcml和Launch.cs文件是用来编写程序的,其中Default.mcm用于编写MCE显示的页面,Launch.cs用于编写Manage Code。
1. 用MCML直接显示“Hello World”
直接用MCML 显示“Hello World”是最容易做到的,如果按第二节所讲的内容,将“Hello 模版”项目装上的话,你会发现已经可以显示“Hello”,离显示“Hello World”只有一步之遥。
打开Default.mcml文件将其修改为如下代码:
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
再把它安装到MCE用,即可显示“Hello World”。
2. 调用Manage Code显示“Hello World”
要想通过Manage Code 来显示“Hello World”就要把Manage Code中的变量传送到MCML文件中,一种方式是在加载MCML之前将值传送给页面;一种是直接在Mcml中定义一种Manage Code的类型,再通过属性将其显示在页面上。
(1) 加载MCML之前将值传送给页面
要想将值传到MCML中,就要在MCML中增加一个用于接收参数的属性,因此要将MCML的
<Color Name="MyColor" Color="White"/>
</Properties>
修改为:
<Color Name="MyColor" Color="White"/>
<cor:String Name="StrMyText" String="$Required"/>
</Properties>
并将
<Default Target="[MyText.Content]" Value="[MyString]"/>
</Rules>
修改为
<Default Target="[MyText.Content]" Value="[StrMyText]"/>
</Rules>
及在MCML中增加了一个接收StrMyText参数,并且在页面上显示这个参数。接下来我们就要把通过Manage Code 将变量传进来。
打开Launch.cs,找到程序的起始点,Launch函数。
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
该函数中的s_session.GoToPage()方法实现的是无参跳转,我们将其修改为:
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
即可将参数传递给MCML,再把它安装到MCE用,即可显示“Hello World”。
(2) 直接在Mcml中定义一种Manage Code的类型
用这种方法实现需要修改MCML的命名空间,将
xmlns:cor="assembly://MSCorLib/System">
修改为:
xmlns:cor="assembly://MSCorLib/System"
xmlns:fn="assembly://Application1/Application1">
其中的第一个Application1为本程序集名,第二个为要从哪个Manage Code类调用输出内容的命名空间。
接下来在Launch.cs文件中的MyAddIn类里面增加如下属性 :
![](https://www.cnblogs.com/Images/OutliningIndicators/None.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/InBlock.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif)
![](https://www.cnblogs.com/Images/OutliningIndicators/ExpandedBlockEnd.gif)
并将MCML修改为:
<Properties>
<Color Name="MyColor" Color="White"/>
</Properties>
<Locals>
<fn:AddIn Name="AddIn"/>
</Locals>
<Rules>
<Default Target="[MyText.Content]" Value="[AddIn.StrText]"/>
</Rules>
<Content>
<Text Name="MyText" Color="[MyColor]" Font="Calibri, 24"/>
</Content>
</UI>
即可实现与(1)同样的效果。
提示:如果编译时提示找不到StrText属性,就注释掉MCML里的这句话,生成后,再用devinstall.cmd,安装一便,再进行mcml掉用,就不会出现找不到方法的问题,这是由于media center调用的程序集是全局程序程序集造成的。
这一节我们用了大量的关于MCML的东西,如果没有标记行语言的基础,也许会是一头雾水,不过没关系,接下来的几节我系统的讲解MCML。下一节讲述,初探MCML。