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文件将其修改为如下代码:

  

<Mcml xmlns="http://schemas.microsoft.com/2006/mcml"
      xmlns:cor
="assembly://MSCorLib/System">

    
<UI Name="Default">

        
<Properties>
            
<Color Name="MyColor" Color="White"/>
        
</Properties>

        
<Locals>
            
<cor:String Name="MyString" String="Hello World"/>
        
</Locals>

        
<Rules>
            
<Default Target="[MyText.Content]" Value="[MyString]"/>
        
</Rules>

        
<Content>
            
<Text Name="MyText" Color="[MyColor]" Font="Calibri, 24"/>
        
</Content>

    
</UI>

</Mcml>

再把它安装到MCE用,即可显示“Hello World”。
2. 调用Manage Code显示“Hello World”
  要想通过Manage Code 来显示“Hello World”就要把Manage Code中的变量传送到MCML文件中,一种方式是在加载MCML之前将值传送给页面;一种是直接在Mcml中定义一种Manage Code的类型,再通过属性将其显示在页面上。
(1) 加载MCML之前将值传送给页面
    要想将值传到MCML中,就要在MCML中增加一个用于接收参数的属性,因此要将MCML的

  

<Properties>
            
<Color Name="MyColor" Color="White"/>
        
</Properties>

 

修改为:

 

<Properties>
            
<Color Name="MyColor" Color="White"/>
              
<cor:String Name="StrMyText" String="$Required"/>
        
</Properties>

 

并将
<Rules>
            
<Default Target="[MyText.Content]" Value="[MyString]"/>
        
</Rules>

 修改为

 

<Rules>
            
<Default Target="[MyText.Content]" Value="[StrMyText]"/>
        
</Rules>

 

及在MCML中增加了一个接收StrMyText参数,并且在页面上显示这个参数。接下来我们就要把通过Manage Code 将变量传进来。
打开Launch.cs,找到程序的起始点,Launch函数。

 

 

public void Launch(AddInHost host)
        
{
            s_session 
= new HistoryOrientedPageSession();
            s_session.GoToPage(
"resx://Application1/Application1.Resources/Default");
        }

 

该函数中的s_session.GoToPage()方法实现的是无参跳转,我们将其修改为:

 

public void Launch(AddInHost host)
        
{
            s_session 
= new HistoryOrientedPageSession();
            Dictionary
<stringobject> properties = new Dictionary<stringobject>();
            properties[
"StrText"= "Hello World";
            s_session.GoToPage(
"resx://Application1/Application1.Resources/Default");

        }

即可将参数传递给MCML,再把它安装到MCE用,即可显示“Hello World”。

(2) 直接在Mcml中定义一种Manage Code的类型
  用这种方法实现需要修改MCML的命名空间,将 

 

 

<Mcml xmlns="http://schemas.microsoft.com/2006/mcml"
      xmlns:cor
="assembly://MSCorLib/System">

修改为:

 

<Mcml xmlns="http://schemas.microsoft.com/2006/mcml"
      xmlns:cor
="assembly://MSCorLib/System"
xmlns:fn
="assembly://Application1/Application1">

     其中的第一个Application1为本程序集名,第二个为要从哪个Manage Code类调用输出内容的命名空间。
接下来在Launch.cs文件中的MyAddIn类里面增加如下属性 :

 

 public string StrText
        
{
            
get
            
{
                
return "Hello World";
            }

        }

 

并将MCML修改为:

 

<UI Name="Default">

        
<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。

posted on 2008-10-31 19:49  Happy Miao  阅读(755)  评论(2编辑  收藏  举报