随笔 - 705  文章 - 0  评论 - 1103  阅读 - 138万 

Silverlight 调用 javaScript

主要使用 HtmlPage.Window 这个对象

xaml.cs 

private void button1_Click(object sender, RoutedEventArgs e)
        {
            //使用Invoke
            HtmlPage.Window.Invoke("calljs", "Invoke");
        }

        private void button2_Click(object sender, RoutedEventArgs e)
        {
            //创建脚本对象
            ScriptObject calljs =
                (ScriptObject)HtmlPage.Window.GetProperty("calljs");
            //使用InvokeSelf
            calljs.InvokeSelf("InvokeSelf");
        }

        private void LayoutRoot_Loaded(object sender, RoutedEventArgs e)
        {
            //JavaScript脚本
            string jsText = @"function calljs(msg){
                        alert(msg);
                    }";
            //创建脚本片段
            HtmlElement element = HtmlPage.Document.CreateElement("Script");
            element.SetAttribute("type", "text/javascript");
            element.SetProperty("text", jsText);
            //添加脚本到Html页面中
            HtmlPage.Document.Body.AppendChild(element);
        }

 

声明创建javaScript  对象的调用方式

private void LayoutRoot_Loaded(object sender, RoutedEventArgs e)
        {
            //JavaScript脚本
            string jsText = @"
                jsObject = function(msg)
                {
                    this.Msg = msg;
                }
                jsObject.prototype.Show = function()
                {
                    alert(this.Msg);
                }";

           //创建脚本对象
            HtmlElement element =  HtmlPage.Document.CreateElement("Script");
            element.SetAttribute("type", "text/javascript");
            element.SetProperty("text", jsText);
            //添加JavaScript到Html页面
            HtmlPage.Document.Body.AppendChild(element);
        }

        private void button1_Click(object sender, RoutedEventArgs e)
        {
            //使用CreateInstance获取JavaScript对象
            ScriptObject script =  HtmlPage.Window.CreateInstance("jsObject" , textBox1.Text);
            script.Invoke("Show");
        }

使用 HtmlWindow 的 Eval 方法

直接写入javascript 的文本,通过

HtmlPage.Window.Eval(textBox1.Text);

来运行这个命令,比如textBox1.Text = “alert('欢迎!')”

 

javaScript 调用  Silverlight

  在xaml.cs 中先要初始化定义好可以被访问的对象和方法

      public javascript5()
        {
            InitializeComponent();
            //注册JavaScript的访问对象
            HtmlPage.RegisterScriptableObject("Builder", this);
        }

        //定义CreateRect为脚本成员
        [ScriptableMember]
        public void CreateRect(int width, int height)
        {
            //创建一个矩形对象
            Rectangle rect = new Rectangle();
            rect.Width = width;
            rect.Height = height;
            rect.Fill = new SolidColorBrush(Colors.Blue);
            LayoutRoot.Children.Clear();
            LayoutRoot.Children.Add(rect);
        }

然后在js的部分就可以调用了

<script type="text/javascript">
        function createRectangle() {
            //根据object的id来获取Silverlight对象
            var xamlobj = document.all('XamlObject');
            //调用Silverlight中的CreateRect方法
            xamlobj.content.Builder.CreateRect(
            document.all('txtWidth').value
            ,document.all('txtHeight').value);
        }
    </script>

 

示例源自Silverlight 开发实践一书

posted on   冯瑞涛  阅读(661)  评论(1编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
点击右上角即可分享
微信分享提示