用JavaScript调用Silverlight(C#)中的方法

用JavaScript调用Silverlight(C#)中的方法
——Silverlight与JavaScript交互第二篇

第一篇:Silverlight中C#获取与修改HTML DOM元素信息
第三篇:用Silverlight(C#)调用JavaScript中的方法
======================================

Silverlight是基于浏览器的应用,因此在Silverlight与用户的交互过程中,经常需要涉及Silverlight与JavaScript的交互,用JavaScript调用Silverlight中的方法也就比较正常。在Silverlight中,提供了这样的解决方式:使用[Scriptable]标签则可以允许JavaScript访问该标签下的类、属性和方法。

用调JavaScript用Silverlight(C#)中的方法的实现步骤如下:

在Page类(自动生成的部分)的上面加上[Scriptable]标签,表示允许JavaScript访问这个类。代码如下:…

Silverlight中C#获取与修改HTML DOM元素信息

Silverlight中C#获取与修改HTML DOM元素信息
——Silverlight与JavaScript交互第一篇

第二篇:用JavaScript调用Silverlight(C#)中的方法
第三篇:用Silverlight(C#)调用JavaScript中的方法
==================================

在Silverlight 1.1中主要使用C#或者VB进行开发,用C#来处理Silverlight中的所有事物逻辑,而不再是1.0中的JavaScript。也因而使得Silverlight和JavaScript的交互则开始变得复杂起来,无论是要用JavaScript调用C#中的方法,还是要用C#调用JavaScript中的方法。

用C#和JavaScript交互首先要解决C#读取HTML DOM元素的问题。

在Silverlight中,要用C#来读取HTML DOM中的元素非常简单,在System.Windows.Browser命名空间下,有一个HtmlDocument、HtmlPage、HtmlElement等类,可以用来读取HTML…

Flash Player 10 代号“Astro”

哇咔咔,Silverlight拼命在后面追,Flash Player则头也不回地往前跑。才发布Flash Player 9不久,就又提到Flash Player 10了。

Adobe Flash Player的产品经理(Product Manager)Emmy Huang在blog上已经证实了这一点:
Making it official: the next major release of Flash Player is codenamed “Astro”
并说会在Adobe MAX 2007上证实这一点。…

C#:在正则表达式替换时进行处理

有些时候我偶们希望在正则表达式的替换中对替换的字符换进行简单的处理,比如把所有的A依次替换为B1、B2、B3……这就需在替换时对字符串进行处理,其实这个很简单,用C#中的MatchEvaluator委托就可以了。简单的示例如下:

private static int i = 0;

public static string ParseToHTML(string ubbString)
{
Regex rgx;
string htmlString = "";

MatchEvaluator me = new MatchEvaluator(AddOne);
rgx = new Regex(@"\[code\](.*?)\[\/code\]");
htmlString = rgx.Replace(htmlString, me);

return htmlString;
}

public static string AddOne(Match m)
{
string code = m.Value.Substring(6,

Silverlight 1.0 Released

Silverlight 1.0正式版发布,安装包大小1.37M,仍然比1.1 Alpha小很多。目前只发布了Windows平台和Mac平台的正式版。

下载地址:
http://www.microsoft.com/silverlight/downloads.aspx

SDK下载地址:
http://msdn.microsoft.com/vstudio/eula.aspx?id=a40f3ffc-2657-02ec-7d67-7a79b4eac832

看了一下SDK中的更新说明,和1.1 Alpha版的SDK更新说明做了一下对比,两者的Enhancements是一致的,而1.0正式版的Breaking Changes则比1.1 Alpha多出这样三条:

OnLoad, OnError, OnResize, OnFullScreenChange are now Function Pointer Based Rather than String

返回指定Canvas中的所有TextBlock

还是因为要用中文,所以需要遍历所有的TextBlock,一一设置字体……还好,不算复杂,先找根Canvas中的节点,如果是TextBlock就加入到List中,如果是Canvas的话就递归一次,然后把返回结果也加入到List中,最终返回一个TextBlock数组。

TextBlock[] FindAllTextBlock(Canvas container)
{
List tbl = new List();

for (int i = 0; i < container.Children.Count; i++)
{
//如果是TextBlock,就加入到List中
if (container.Children[i].GetType() == typeof(TextBlock))
tbl.Add(container.Children[i] as TextBlock);
//如果是Canvas,就继续递归查找
else if (container.Children[i].GetType() == typeof(Canvas))

Silerlight也可以不放在页面的顶层

很多插件都是位于页面的顶层的,在页面上无论如何也覆盖不了,默认的Silverlight设置也是这样的,但是加一个参数就可以把Silverlight从顶层拿下来了,然后你就可以在上面放上你要的文字,文本框,甚至透明的flash。这个参数就是isWindowless,依然是修改createSilverlight方法,在properties代码块中加上如下一行:

isWindowless: “true”,

这样就把Silverlight从顶层拿下来了。剩下的你就可以发挥啦,用CSS把flash、文本框、按钮放上去吧!…

Silverlight读XML是件痛苦的事情

本来以为Silverlight读XML那岂不是太方便了,没想到用Silverlight来读取XML中的节点原来是件非常令人痛苦的事情,尽管你用的是C#!因为Sivlerlight把WPF精简得太厉害,读XML只有XmlReader了……XmlReader是不支持XPath和XmlDocument的(这么好的东西都不要,莫非是因为Silverlight的体积问题?)

如果要用Silverlight读XML,建议看看这两篇文章:

1. Working with XML in Silverlight

2. howto使用http接收和发送简单的xml请求

有个建议,在读取每个节点的值之前最好先判断一下节点的类型(NodeType),否则很有可能出现一些不可解释的“灵异”现象………

让网页中的Silverlight背景也透明

Silverlight的背景也是可以透明的,改改JS代码就好了~

打开TestPage.html.js(默认的文件名),修改createSilverlight()函数,在properties大括号中增加两行:

isWindowless: “true”,
background: “#00ffffff”,

由于Sivlerlight中的颜色采用ARGB模式,即Alpha、Red、Green、Blue各用两位十六进制数来表示,所以只要把代表Alpha的那两位设置为00就行了,其他的随便了,反正透明了也看不到。

如果是把这两行放到原来代码的最后面(properties大括号以内),要记得把原来的最后一行代码末尾加上一个半角的逗号,而现在的最后一行就不要那个逗号了,即这个样子的:

properties: {
width: “100%”,
height: