none
有关Silverlight问题? RRS feed

  • 问题

  • 请问老师:

     

               我在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.

    2008年11月8日 6:25

答案

  • 你可以直接在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;
          } 
         }
        }
       });

    2008年11月8日 12:02
  • 对,基本就是这个意思,如果你建立的是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的很多特性不能应用进去

    2008年11月9日 14:20
    版主

全部回复

  • 你的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.一般不推荐这种方法,容易造成你程序的混乱.

    2008年11月8日 10:19
    版主
  • 你可以直接在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;
          } 
         }
        }
       });

    2008年11月8日 12:02
  •  

    首先非常感谢你的回答。你的意思就是说,如果我在Default.aspx页面中有两个Div,分别是Div1和Div2,这个时候我的Silverlight项目中也有两个.xaml文件一个是默认Page.xaml,另一个是我自己建的Page1.xaml。你的意思是说我不能在Default.aspx页面中同时调用这两个.xaml文件。要想调用的话我必须要把Page1.xaml文件放到其他的Silverlight项目中。
    2008年11月9日 1:33
  •  

    在一个不是Silverlight项目中添加了一个.xmal文件是不可以进行C#编写后台代码的,不知道我说的对不对?
    2008年11月9日 1:36
  • 哪你就建立两个UserControl呀,Page1调用第一个UserControl,Page2调用第二UserControl.

     

    2008年11月9日 9:50
  • 对,基本就是这个意思,如果你建立的是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的很多特性不能应用进去

    2008年11月9日 14:20
    版主
  • 第一步

    <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();
    }

     

            }

     

    2008年11月10日 5:10
  • 一个SilverLight2 Application后台需要添加一些代码,读取当前是哪个页面调用,建立两个UserControl,对应的页面显示对应的UserControl

     

    这个方法可以讲的具体点吗?谢谢

    2008年11月10日 12:59
  • 你可以在InitParams中指定多个参数,用逗号隔开!在Silverlight里面处理参数即可!

    2008年11月11日 0:38