JJY

(转)Silverlight Application包含多xaml文件的问题

原文地址:http://social.microsoft.com/Forums/zh-CN/silverlightzhchs/thread/749a2ce1-dfd8-4d11-88ee-537dd4a37842/

 

请问老师: 

     我在VS2008中新建了一个Silverlight项目。里面有个.xaml 文件,一个是Page.xaml,另一个是Page1.xaml文件。我如何在default.aspx和default2.aspx中分别用Page.xaml 和Page1.xaml.也就是说default.aspx用Page.xaml 而default2.aspx用Page1.xaml。默认的全部是用Page.xaml.

 

 

1.答复:

     你的SilverLight2的项目默认编译为1个xap,默认的初始控件入口是Page.xaml.如果你想要显示两个不同的SilverLight可以添加两个SilverLight2的项目到你个工程中, Default.aspx引用 slapp1.xap,Default2.aspx引用slapp2.xap.一个SilverLight xap只有一个入口.

     抽象个概念,就好比一个WinForm程序,你想要在机器1上执行这个exe显示界面1,机器2上执行这个.exe显示界面2,也不是不可以实现,就是你还要判断你的页面路径是什么,如果是Default.aspx默认显示page.xaml,如果是Defalut1.aspx,那么Page.Xaml载入Page1.Xaml.一般不推荐这种方法,容易造成你程序的混乱.

 

 

2.答复:

     你可以直接在ASP.NET项目中添加两个XAML文件(如果是仅仅用XAML文件就可以的话),在ASPX页面把Silverlight控件的Source属性指为你要加载的页面即可,如果不使用Silverlight控件,可以在JavaScript代码中指定Source参数如:

function createSilverlight()
  {
   var scene = new SilverlightSite1.Page();
   Silverlight.createObjectEx({
    source: "xaml/MYXAML1.xaml",
    parentElement: document.getElementById("silverlightControlHost"),
    id: "SilverlightControl",
    properties: {
     width: "100%",
     height: "100%",
     version: "1.0"
    },
    events: {
     onLoad: Silverlight.createDelegate(scene, scene.handleLoad),
     onError: function(sender, args) {
      var errorDiv = document.getElementById("errorLocation");
      if (errorDiv != null) {
       var errorText = args.errorType + "- " + args.errorMessage;
         
       if (args.ErrorType == "ParserError") {
        errorText += "<br>File: " + args.xamlFile;
        errorText += ", line " + args.lineNumber;
        errorText += " character " + args.charPosition;
       }
       else if (args.ErrorType == "RuntimeError") {
        errorText += "<br>line " + args.lineNumber;
        errorText += " character " +  args.charPosition;
       }
       errorDiv.innerHTML = errorText;
      } 
     }
    }
   });

 

3.答复:

     如果你建立的是SilverLight2的Application 就很不方便在两个不同的页面调用一个SilverLight2项目中的两个不同的UserControl

     如果想用这种方法解决办法基本有:

     1.建立两个SilverLight2 Application两个页面分别引用不同的xap

     2.一个SilverLight2 Application后台需要添加一些代码,读取当前是哪个页面调用,建立两个UserControl,对应的页面显示对应的UserControl

     3.用超哥说的,如果你只是Xaml描述,或者基于SilverLight 1.0标准就是Xaml+Javascript的,可以两个页面分别引用两个Xaml文件,不用引用xap

     方法1最为方便

     方法2适合你大范围的应用,如果你只有两个页面这么用的话,我觉得就不适宜,如果是n个页面的情况可以进一步考虑

     方法3最为灵活,但是你SilverLight2的很多特性不能应用进去

 

4.答复:

第一步

     <div>

       <object data="data:application/x-silverlight-2," type="application/x-silverlight-2" width="100%" height="100%">
        <param name="source" value="ClientBin/yourapp.xap"/>

       <param name="initParams" value="1" />
        <param name="onerror" value="onSilverlightError" />
        <param name="background" value="white" />
        <param name="minRuntimeVersion" value="2.0.31005.0" />
        <param name="autoUpgrade" value="true" />
        <a href="
http://go.microsoft.com/fwlink/?LinkID=124807" style="text-decoration: none;">
             <img src="
http://go.microsoft.com/fwlink/?LinkId=108181" alt="Get Microsoft Silverlight" style="border-style: none"/>
        </a>
       </object>

     </div>

      第二步

        private void Application_Startup(object sender, StartupEventArgs e)
        {
            if (e.InitParams.Count == 0)
            {
                this.RootVisual = new StartPage();
            }
            else
            {

string para=e.InitParams[0].ToString();

if(para=="1")

{
                this.RootVisual = new Page1();
}

 

if(para=="2")

{
                this.RootVisual = new Page2();
}

}

posted on 2009-03-05 01:11  MikeJia  阅读(1260)  评论(0)    收藏  举报

导航