| function dropDots(sender, mouseEventArgs){alert('dots dropped!');} 刷新一下这个页面,现在你会发现,当你在小圆圈上点击时,会弹出一个对话框
接下来对alert语句稍微做一下改动,如下:
sender.fill = "red";
这就是一个简单的与XAML交互的例子,看起来还是瞒easy的,再重新刷新一下这个页面,在小圆圈上点击时,你会发现它的颜色就变成红色了。
现在再用下面的语句替换到sender.fill:
alert(sender.Fill.Color);
这样返回的就是当前小圆圈颜色的值了。
第3步:将PHP添加为XAML的源
那么PHP该放到那儿呢?正如前面提到的,你可以将其作为Silverlight对象的一个源使用。
将清单4中的代码保存为drawDots.php。
清单4:drawDots.php
<?header('Content-type: text/xml');?><Canvas xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:Name="controlPanel_design"><Canvas x:Name="Layer_1" Width="640" Height="80" Canvas.Left="0" Canvas.Top="0"><Ellipse x:Name="Ellipse" Width="71" Height="71" Canvas.Left="99.5133" Canvas.Top="5.5" Stretch="Fill" StrokeThickness="3" StrokeLineJoin="Round" Stroke="#FF000000" Fill="#FFFF0000"/><Ellipse x:Name="Ellipse_0" Width="71" Height="71" Canvas.Left="192.86" Canvas.Top="5.5" Stretch="Fill" StrokeThickness="3" StrokeLineJoin="Round" Stroke="#FF000000" Fill="#FFFFFF00"/><Ellipse x:Name="Ellipse_1" Width="71" Height="71" Canvas.Left="286.207" Canvas.Top="5.5" Stretch="Fill" StrokeThickness="3" StrokeLineJoin="Round" Stroke="#FF000000" Fill="#FF00C800"/><Ellipse x:Name="Ellipse_2" Width="71" Height="71" Canvas.Left="379.553" Canvas.Top="5.5" Stretch="Fill" StrokeThickness="3" StrokeLineJoin="Round" Stroke="#FF000000" Fill="#FF230FD2"/><Ellipse x:Name="Ellipse_3" Width="71" Height="71" Canvas.Left="472.9" Canvas.Top="5.5" Stretch="Fill" StrokeThickness="3" StrokeLineJoin="Round" Stroke="#FF000000" Fill="#FFC80FA0"/></Canvas></Canvas> 接下来,在createSilverlight.js中添加一个函数: | function createDisplayCanvas(){Silverlight.createObjectEx({source: "drawDots.php",parentElement: document.getElementById("dotDisplayCanvas"),id: "slDisplayCanvas",properties: {width: "100%",height: "100%",inplaceInstallPrompt:true,version: "1.0"}});} 最后,替换PHPDemo.htm中的内容: <div></div> 为 | <div><script type="text/javascript">createDisplayCanvas();</script></div> 重新刷新一下页面,这下你会发现现在页面上显示了两排小圆圈,如图3所示。

第4步:用PHP创建动态XAML
至此,所有小块都完成了,你可以加入最后的代码了,在第2步中,你创建了一些鼠标事件,在第3步中,你创建了一些PHP代码,你可能已经猜到下面将要做什么了。 对于这个demo,你的控制面板有且只有一个功能就是:增加带颜色的小圆圈,其实,你还可以做得更多,但限于篇幅,我这里只介绍一下使用URL字符串传递一连串的JavaScript变量,概括如下:
●每次点击小圆圈时,JavaScript将添加一个新值到字符串中。 ●然后将这个字符串传递给你的PHP脚本。 ●PHP脚本将这个字符串转变为数组。 ●基于数组的长度和值,返回一套小圆圈。
createSilverlight.js要做一点改动,由于颜色是作为一个通用的名字进行传递的,但我更喜欢使用十六进制值表示,正如你在前面看到的,Fill.Color返回的值很长,为了将其转换为十六进制,需要添加下面这个函数:
| function getFillColor(color){var fill = color;if (fill < 0) {fill = (16777216 + parseInt(fill));}fill = fill.toString(16);if (fill.length > 6) {fill = fill.substr(fill.length - 6);}while (fill.length < 6) {fill = "0" + fill;}fill = "ff" + fill;return fill;} 注意最后添加到字符串的"ff",Silverlight使用8位数表示十六进制颜色值,因此需要在6位值的前面加上两个字符"ff"。 使用下面的代码完全替换掉dropDots()函数: | var dotColors="";function dropDots(sender, mouseEventArgs){if (dotColors != ""){dotColors += ",";}dotColors += getFillColor(sender.Fill.Color);createDisplayCanvas();} 注意这里使用了新的全局变量"dotColors"。 在createDisplayCanvas()函数中,用: source: "drawDots.php?colors=" + dotColors, 替换掉: source: "drawDots.php", 至此,createSilverlight.js的内容如下: 清单5:修改好的createSilverlight.js | function createControlPanel(){Silverlight.createObjectEx({source: "controlPanel.xaml",parentElement: document.getElementById("dotControlPanel"),id: "slControlPanel",properties: {width: "100%",height: "100%",inplaceInstallPrompt:true,version: "1.0"}});}if (!window.Silverlight) window.Silverlight = {};Silverlight.createDelegate = function(instance, method) {return function() {return method.apply(instance, arguments);}}var dotColors="";function dropDots(sender, mouseEventArgs){if (dotColors != ""){dotColors += ",";}dotColors += getFillColor(sender.Fill.Color);createDisplayCanvas();}function createDisplayCanvas(){ Silverlight.createObjectEx({source: "drawDots.php?colors=" + dotColors,parentElement: document.getElementById("dotDisplayCanvas"),id: "slDisplayCanvas",properties: {width: "100%",height: "100%",inplaceInstallPrompt:true,version: "1.0"}});}function getFillColor(color){var fill = color;if (fill < 0) {fill = (16777216 + parseInt(fill));}fill = fill.toString(16);if (fill.length > 6) {fill = fill.substr(fill.length - 6);}while (fill.length < 6) {fill = "0" + fill;}fill = "ff" + fill;return fill;} 用清单6中的代码完全替换掉drawDots.php。 清单6:修改后的drawDots.php <?header('Content-type: text/xml');?><?$arrColors = explode(",",$_GET["colors"]);srand(time());?><Canvas xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:Name="resultCanvas"><Canvas x:Name="Layer_1" Width="640" Height="80" Canvas.Left="0" Canvas.Top="0"><?$n = 0;foreach ($arrColors as $c) {$n++;$lft = (rand()%530);$top = (rand()%370);echo('<Ellipse x:Name="Ellipse_' . $n . '" Width="100" Height="100" Canvas.Left="' . $lft . '" Canvas.Top="' . $top . '" Stretch="Fill" Fill="#' . $c . '"/>');}?></Canvas></Canvas> 正如你所看到的,XAML中的鼠标事件触发了一个包括一个全局变量的JavaScript程序,它填充选中的小圆圈的颜色,然后调用createDisplayCanvas()重新绘制画布,通过GET将这个字符串传递给PHP。
新的PHP脚本将GET字符串转换成数组,然后通过每一个形成一个环,另外,我还在Ellipse XAML echo内为Canvas.Left和Canvas.Top设置了随机数以增加公式的随机性,这对于其他的东西没有任何实用的价值,只不过是想刺激一下想象力,产生更多的创造力和激发人们对这个技术的热情。
最终结果可以下载zip压缩包。
上一篇:面向工业电脑与嵌入式系统的节电长效内存
下一篇:FTTx构建移动全业务接入网
国内最全面、系统、专业的手机天线设计培训课程,没有之一;是您学习手机天线设计的最佳选择...【More..】
射频工程师养成培训课程套装,专家授课,让您快速成为一名优秀的射频工程师【More..】
网站地图
| | | | | | | | |