上一篇我简单的测试了一下与页面上的控件进行交互的例子,包括属性的修改,事件的注册以及事件处理程序的定义,只不过这种方式有个问题,我们要参与的交互对象必须要事件定义好,如果我们能导入dll,在脚本文件中实例化对象,我们将来更大的灵活性,请看下面的测试
1:首先延续上篇的代码进行测试,直接修改脚本文件,引入dll
代码 var temp = @" import System.Controlsfrom System.Controls import *Button1.Content='sssss'TextBox1.Text='dsfadfaa'TextBox1.Background =Backgrounddef light(s, e): s.Foreground = f1def dark(s, e): s.Foreground = f2def click(s,e): TextBox1.Text='你单击了我哦!'Button1.MouseEnter += lightButton1.MouseLeave += darkButton1.Click += click " ;
执行出错,无法运行!
在网上查了一大堆也没有找到为啥,我们试试把脚本文件放到.py文件中去
我添加了一个test.py的文件
import System.Windows.Controls import System.Windows.Media from System.Windows.Controls import * from System.Windows.Media import * def f1(s): return 'python f1: ' + s tt = SolidColorBrush(Colors.Red); tt1 = SolidColorBrush(Colors.Yellow); tt2 = SolidColorBrush(Colors.Red); Button1.Content='sssss' TextBox1.Text='dsfadfaa' TextBox1.Background =tt def light(s, e): s.Foreground = tt1 def dark(s, e): s.Foreground = tt2 def click(s,e): TextBox1.Text='clik me oo!' Button1.MouseEnter += light Button1.MouseLeave += dark Button1.Click += click
.cs代码文件
代码 public MainPage() { InitializeComponent(); var runtime = Silverlight.DynamicEngine.CreateRuntime(); var python = runtime.GetEngine( " python " ); ScriptScope ss = python.CreateScope(); ss.SetVariable( " Button1 " , this .btn); ss.SetVariable( " TextBox1 " , this .txt); dynamic script = python.CreateScriptSourceFromFile( " test.py " ).Execute(ss); // dynamic script = runtime.UseFile("script.py"); }
运行效果如图:
1:
2:
3:
看看我们做了什么事件,
我们直接调用了一个.py文件,把控件注册到脚本文件中,
1:在脚本中引入命名空间
2:动态实例化一个引入的命名空间下的类
3:修改控件的属性
4:可以注册事件以及定义一个事件处理程序
这些功能可以为我们的页面提供更好的交互性!
转载于:https://www.cnblogs.com/wangxh/archive/2010/10/24/1859772.html