-----------------------------------------------------------------------------------------
方法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;