Silverlight 与 Javascript 交互

 -----------------------------------------------------------------------------------------

方法1:

Imports System.Windows.Browser 

Private Sub Btn_click(ByVal sender as object,e as routedeventargs) 

  dim myjs as scriptobject = HtmlPage.Window.CreateInstance("函数名称","传递参数")

   '创建实例后直接会运行,无需invoke方法调用

End Sub

方法2:

Imports System.Windows.Browser 

Private Sub Btn_click(ByVal sender as object,e as routedeventargs) 

  dim myjs as scriptobject =  HtmlPage.Window.GetProperty("函数名称")

   '个人理解是找到这个函数然后需要调用执行

    myjs.InvokeSelf("传递参数")

End Sub

方法3:

Imports System.Windows.Browser 

Private Sub Btn_click(ByVal sender as object,e as routedeventargs) 

  dim  strjs as string = "alert("test ok!")"

  HtmlPage.Window.Eval(String.Format(strjs,"传递参数"))

End Sub

方法4:

Imports System.Windows.Browser 

Private Sub Btn_click(ByVal sender as object,e as routedeventargs) 

  HtmlPage.Window.Invoke("函数名","传递参数")

End Sub

笔记2: 如何获取js中的json对象?

-----------------------------------------------------------------------------------------

1、在javascript中定义一个json对象

<script type="text/javascript">

var students ={Name:"jane",Age:"22"}

function getJson() {

return students; 

}
</script>

2、在silverlight中定义个类,属性与Json中的对应 

Public Class Students

Dim _Name as String

Public Property Name() as String

Get

Return _Name

End Get

Set (ByVal value as String)

_Name = value

End Set

End Property

Dim _Age as String

Public Property Age() as String

Get

Return _Age

End Get

Set (ByVal value as String)

_Age= value

End Set

End Property

End Class 

3、在silverlight中使用前面的invoke方法调用

Imports System.Windows.Browser

private Sub btn_click(ByVel sender as object, ByVel e as routedeventargs)

Dim myScript as ScriptObject = HtmlPage.Window.Invoke("getJson",vbNull)

Dim Students as Students = myScript.convertTo(of Students)

HtmlPage.Window.Alert(String.Format("这是传递过来的两个值,Name={0},Age={1}", Students.Name, Students.Age.ToString))

End Sub

4、F5运行后看到效果

如何使用js控制silverlight中的对象?

-----------------------------------------------------------------------------------------

1、先给silverlight的object标签加一个参数,参考下面这样:

<object data="data:application/x-silverlight-2," type="application/x-silverlight-2"
            width="100%" height="100%">
            <param name="source" value="ClientBin/JavaScriptInvoke.xap" />
            <param name="onError" value="onSilverlightError" />
            <param name="background" value="white" />
            <param name="minRuntimeVersion" value="3.0.40818.0" />
            <param name="onLoad" value="SilverlightLoaded" />
            <param name="autoUpgrade" value="true" />
            <a 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="Get Microsoft Silverlight"
                    style="border-style: none" />
            </a>
        </object>
2、function SilverlightLoaded(sender,args) {
    slobj = sender.getHost();  //获取silverlight控件对象
    var headPhoto = slobj.Content.FindName("HeadImage")
    headPhoto["Source"] = "http://avatar.profile.csdn.net/C/4/1/2_zhuzhi.jpg";
}

js如何运行silverlight过程?                 RegisterScriptableObject

-----------------------------------------------------------------------------------------

1、  Private Sub MainPage_Loaded(ByVal sender As Object, ByVal e As RoutedEventArgs) Handles Me.Loaded
        HtmlPage.RegisterScriptableObject("SLdo", Me)
        End Sub

2、    <ScriptableMember()>
        Public Sub dome()
        HtmlPage.Window.Alert("Test OK!")
        End Sub

3、在js中使用

<script type="javascript">

  ..........

  gmHost = $Id("gmHost")
  gmHost.Content.SLdo.dome();

</script>

4、F5 运行测试结果

js如何运行silverlight过程?                 RegisterScriptableObject

-----------------------------------------------------------------------------------------

js动态添加xaml?          

-----------------------------------------------------------------------------------------

一般用于ajax返回数据后动态添加到场景

var str_xaml = '<rectangle width="100" height="100"/>';

var sl_obj = PlugeIn.Content.creartFromXaml(str_xaml);

PlugeIn.Content.FindName("").Children.add(sl_obj);

Silverlight的ListBox和DataGrid绑定

Demo1 

前台:

<my:DataGrid x:Name="GridPerson" AutoGenerateColumns="False" AlternatingRowBackground="Blue" GridlinesVisibility="All"    Width="400" Height="300" Canvas.Top="10" Canvas.Left="10">
 <my:DataGrid.Columns>
     <my:DataGridTextBoxColumn Header="Id" DisplayMemberBinding="{Binding Id}"  ></my:DataGridTextBoxColumn>
     <my:DataGridTextBoxColumn Header="Name" DisplayMemberBinding="{Binding Name}" ></my:DataGridTextBoxColumn>
      <my:DataGridTextBoxColumn Header="Email" DisplayMemberBinding="{Binding Email}" ></my:DataGridTextBoxColumn>
       <my:DataGridTemplateColumn Header="Del">
              <my:DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                           <TextBox Text="{Binding Email}"></TextBox>
                    </DataTemplate>
              </my:DataGridTemplateColumn.CellTemplate>
        </my:DataGridTemplateColumn>
   </my:DataGrid.Columns>
</my:DataGrid>

后台:

 void BindData()
        {
            System.Collections.Generic.List<PersonInfo> personlist = new List<PersonInfo>();

            personlist.Add(new PersonInfo() { Id="0008", Name="陈国成8", Email="guocheng.chen8@rising.com" });
            personlist.Add(new PersonInfo() { Id = "0001", Name = "x1", Age = "0",Deleted=true });
            personlist.Add(new PersonInfo() { Id = "0002", Name = "x2",  Age = "0",Deleted = true });
            personlist.Add(new PersonInfo() { Id = "0003", Name = "x3",  Age = "0",Deleted = false });
            this.GridPerson.ItemsSource = personlist;
        }

Demo2

<ListBox x:Name="LstPerson">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <TextBlock Text="{Binding Name}"></TextBlock>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>  



this.LstPerson.ItemsSource = personlist;


 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值