zoukankan      html  css  js  c++  java
  • Silverlight 与 html 相互取得数据

    一.【效果图】

    功能描述:

    1.当在左侧输入姓名年龄点击设置的时候 将值传递给右侧的xaml页面,也可以从XAML页面中获得数据

    2.当在右侧输入姓名年龄点击设置的时候 将值传递给左侧的HTML页面, 也可以从Html页面中获得数据

    二.【代码结构】

    首先建立一个html界面,包括表单以及承载silverlight布局

     (1)html界面

    代码
    <head runat="server">
        
    <title></title>

        
    <script type="text/javascript" src="Silverlight.js"></script>

        
    <script type="text/javascript">
            
    function onSilverlightError(sender, args) {
                
    var appSource = "";
                
    if (sender != null & sender != 0) {
                    appSource 
    = sender.getHost().Source;
                }

                
    var errorType = args.ErrorType;
                
    var iErrorCode = args.ErrorCode;

                
    if (errorType == "ImageError" || errorType == "MediaError") {
                    
    return;
                }

                
    var errMsg = "Silverlight 应用程序中未处理的错误" + appSource + "\n";

                errMsg 
    += "代码: " + iErrorCode + "    \n";
                errMsg 
    += "类别: " + errorType + "       \n";
                errMsg 
    += "消息: " + args.ErrorMessage + "     \n";

                
    if (errorType == "ParserError") {
                    errMsg 
    += "文件: " + args.xamlFile + "     \n";
                    errMsg 
    += "行: " + args.lineNumber + "     \n";
                    errMsg 
    += "位置: " + args.charPosition + "     \n";
                }
                
    else if (errorType == "RuntimeError") {
                    
    if (args.lineNumber != 0) {
                        errMsg 
    += "行: " + args.lineNumber + "     \n";
                        errMsg 
    += "位置: " + args.charPosition + "     \n";
                    }
                    errMsg 
    += "方法名称: " + args.methodName + "     \n";
                }

                
    throw new Error(errMsg);
            }
        
    </script>

    </head>
    <body>

        
    <script type="text/javascript">

            
    function On_Set() {

                
    var obj = document.getElementById("obj_sl").content.UserScript;

                obj.Name 
    = document.getElementById("name").getAttribute("value")

                obj.Age 
    = document.getElementById("age").getAttribute("value")
            }

            
    function On_Get() {

                
    var obj = document.getElementById("obj_sl").content.UserScript;

                document.getElementById(
    "name").setAttribute("value", obj.Name);

                document.getElementById(
    "age").setAttribute("value", obj.Age);

            }
        
    </script>

        
    <table border="1" width="600" height="400" align="center">
            
    <tr>
                
    <td style=" 50%">
                    
    <align="center">
                        
    <span style="font-size: x-large;">HTML页面表单</span>
                    
    </p>
                    
    <table bgcolor="silver" align="center">
                        
    <tr>
                            
    <td>
                                姓名:
                            
    </td>
                            
    <td>
                                
    <input id="name" style=" 98%" />
                            
    </td>
                        
    </tr>
                        
    <tr>
                            
    <td>
                                年龄:
                            
    </td>
                            
    <td>
                                
    <input id="age" style=" 98%" />
                            
    </td>
                        
    </tr>
                        
    <tr>
                            
    <td>
                                操作:
                            
    </td>
                            
    <td>
                                
    <input id="btn_Save" type="button" value=">>【设置】" onclick="On_Set();" />
                                
    <input id="btn_clear" type="button" value="<<【获得】" onclick="On_Get();"/>
                            
    </td>
                        
    </tr>
                    
    </table>
                
    </td>
                
    <td style=" 50%">
                    
    <div id="silverlightControlHost" align="center">
                        
    <object id="obj_sl" data="data:application/x-silverlight-2," type="application/x-silverlight-2"
                            width
    ="100%" height="100%">
                            
    <param name="source" value="ClientBin/BruceTSilverlightDemo.xap" />
                            
    <param name="onerror" value="onSilverlightError" />
                            
    <param name="background" value="white" />
                            
    <param name="minRuntimeVersion" value="3.0.40818.0" />
                            
    <param name="autoUpgrade" value="true" />
                            
    <href="http://go.microsoft.com/fwlink/?LinkID=149156&v=3.0.40818.0" style="text-decoration: none;">
                                
    <img src="http://go.microsoft.com/fwlink/?LinkId=108181" alt="获取 Microsoft Silverlight"
                                    style
    ="border-style: none" />
                            
    </a>
                        
    </object>
                        
    <iframe id="_sl_historyFrame" style='visibility: hidden; height: 0;  0; border: 0px'>
                        
    </iframe>
                    
    </div>
                
    </td>
            
    </tr>
        
    </table>
    </body>

     (2)XAML页面

    代码
     <Grid x:Name="LayoutRoot">
           
            
    <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center" >
                
    <TextBlock Text="XAML页面表单" FontSize="25" Margin="10"/>
                
    <StackPanel Orientation="Horizontal" Margin="10">
                    
    <TextBlock Text="名称:" FontSize="18"/>
                    
    <TextBox Name="txt_name" Width="150" Text="{Binding Name,Mode=TwoWay}" />
                
    </StackPanel>
                
    <StackPanel Orientation="Horizontal" Margin="10">
                    
    <TextBlock Text="年龄:" FontSize="18"/>
                    
    <TextBox Name="txt_age" Width="150" Text="{Binding Age,Mode=TwoWay}"/>
                
    </StackPanel>
                
    <StackPanel Orientation="Horizontal" Margin="10">
                    
    <Button Content="【设置】" Name="btn_set" Click="btn_set_Click" Margin="5" FontSize="18"/>
                    
    <Button Content="【获得】" Name="btn_get" Click="btn_get_Click" Margin="5" FontSize="18"/>
                
    </StackPanel>
            
    </StackPanel>
            
        
    </Grid>

     (3) XAML后台代码

    代码
     /// <summary>
        
    /// 标识:【BruceT】
        
    /// 日期:【2010.11.13】
        
    /// </summary>
        public partial class MainPage : UserControl
        {
            System.Windows.Browser.HtmlElement _btn_name;
            System.Windows.Browser.HtmlElement _btn_age;

            
    public MainPage()
            {
                InitializeComponent();

                UserScriptable user 
    = new UserScriptable { Name = "", Age = "" };
                
    base.DataContext = user;//将user赋值给数据上下文。

                System.Windows.Browser.HtmlPage.RegisterScriptableObject(
    "UserScript", user);//将该对象设置成可脚本化

                _btn_name 
    = System.Windows.Browser.HtmlPage.Document.GetElementById("name");
                _btn_age 
    = System.Windows.Browser.HtmlPage.Document.GetElementById("age");

            }

            
    private void btn_set_Click(object sender, RoutedEventArgs e)
            {
                _btn_name.SetAttribute(
    "value", txt_name.Text);
                _btn_age.SetAttribute(
    "value", txt_age.Text);
            }

            
    private void btn_get_Click(object sender, RoutedEventArgs e)
            {
                
    if (_btn_name.GetAttribute("value"== null || _btn_age.GetAttribute("value"== nullreturn;

                txt_name.Text 
    = _btn_name.GetAttribute("value");
                txt_age.Text 
    = _btn_age.GetAttribute("value");
            }
        }

     (4) 实体类

    代码
     public class UserScriptable : INotifyPropertyChanged
        {
            
    private string _name;
            [ScriptableMember]
            
    public string Name
            {
                
    get { return _name; }
                
    set { _name = value; NOtifyPropertyChanged("Name"); }
            }

            
    private string _age;
            [ScriptableMember]
            
    public string Age
            {
                
    get { return _age; }
                
    set { _age = value; NOtifyPropertyChanged("Age"); }
            }

            
    #region INotifyPropertyChanged 成员

            
    public event PropertyChangedEventHandler PropertyChanged;

            
    public void NOtifyPropertyChanged(string propertyname)
            {
                
    if (PropertyChanged != null)
                {
                    PropertyChanged(
    thisnew PropertyChangedEventArgs(propertyname));
                }
            }
            
    #endregion
        }

    总结,从xaml 赋值/获取值通过html ,相对来说比较简单.

    从html 获取xaml 的值,我们需要获得xap 中的内容,那我们如果能让绑定的实体被js 所看到呢这涉及到silverlight 可脚本化的知识点.

    常使用的内部对象

    HtmlPage.RegisterScriptableObject("silverlightObject", this); //注册可脚本化实例

    HtmlPage.Document.GetElementById("btnHello").SetStyleAttribute("display", "inline");//html标记样式属性

    // 调用页面的 JavaScript 方法
    HtmlPage.Window.Invoke("jsfun", "a");

     // 执行任意 JavaScript 语句
    HtmlPage.Window.Eval("jsfun('a')");

  • 相关阅读:
    关于秒杀的系统架构优化思路
    如何设计一个秒杀系统
    RabittMQ实践(二): RabbitMQ 与spring、springmvc框架集成
    RabittMQ实践(一): RabbitMQ的安装、启动
    Java 网络IO编程总结(BIO、NIO、AIO均含完整实例代码)
    Linux 网络 I/O 模型简介(图文)
    Java 网络编程(六) 使用无连接的数据报(UDP)进行通信
    Java 网络编程(五) 使用TCP/IP的套接字(Socket)进行通信
    Java 网络编程(四) InetAddress类
    Java 网络编程(三) 创建和使用URL访问网络上的资源
  • 原文地址:https://www.cnblogs.com/tongly/p/1876413.html
Copyright © 2011-2022 走看看