Silverlight下面的IronPyton(2)

it2025-02-12  9

上一篇文章初步测试了一下在silverlight下面IronPython的简单调用,以直接执行语句的方式进行脚本执行。

   下面我们看看脚本文件如何与页面上的控件进行交互

   xaml代码:

         <Grid x:Name="LayoutRoot" Background="White">        <Grid.ColumnDefinitions>            <ColumnDefinition Width="300"></ColumnDefinition>            <ColumnDefinition Width="150"></ColumnDefinition>            <ColumnDefinition Width="150"></ColumnDefinition>        </Grid.ColumnDefinitions>        <Grid.RowDefinitions>            <RowDefinition Height="30"></RowDefinition>            <RowDefinition Height="30"></RowDefinition>            <RowDefinition Height="30"></RowDefinition>            <RowDefinition Height="30"></RowDefinition>            <RowDefinition Height="30"></RowDefinition>            <RowDefinition Height="30"></RowDefinition>        </Grid.RowDefinitions>        <TextBox  TextWrapping="Wrap"  Name="txtScript" Grid.Column="0" Grid.RowSpan="5">                    </TextBox>                <TextBox Grid.Row="0" Grid.ColumnSpan="2" Grid.Column="1" Text="脚本控件以下控件"></TextBox>        <TextBox Grid.Row="1" Grid.Column="1" Text="按钮"></TextBox>        <Button Name="btn" Grid.Row="1" Grid.Column="2" Content="click me!"></Button>        <TextBox Grid.Row="2" Grid.Column="1" Text="文本框"></TextBox>        <TextBox Name="txt" Grid.Row="2" Grid.Column="2" Text="hell python!"></TextBox>                <Button Grid.Row="5" Grid.ColumnSpan="3" Content="run" Click="Button_Click"></Button>    </Grid>   

.cs代码

     

ScriptEngine _engine;        ScriptScope _scope;            public MainPage()        {            InitializeComponent();            this._engine = Python.CreateEngine();            this._scope = this._engine.CreateScope();

            this.Registor(this.btn, "Button1");//把xaml中定义的button注册到脚本文件中            this.Registor(this.txt, "TextBox1");//把xaml定义的textbox注册到脚本文件中            SolidColorBrush tt = new SolidColorBrush(Colors.Red);/                       this.Registor(tt, "Background");            //tt为提前实例化的对象,并注册到脚本文件中        }

        public void Registor(object obj, string name)        {            this._scope.SetVariable(name, obj);        }        public void UnRegister(string name)        {            this._scope.RemoveVariable(name);        }

//单击按钮后执行脚本

        private void Button_Click(object sender, RoutedEventArgs e)        {

            var temp = @"Button1.Content='sssss'TextBox1.Text='dsfadfaa'TextBox1.Background =Background 

TextBox1.Text='你单击了我哦!'";            Exec(temp);        }

    public void Exec(string script)        {           _engine.CreateScriptSourceFromString(script, SourceCodeKind.Statements).Execute(_scope);        }

 

 

 

我们看看脚本都做了什么事情,运行脚本以后,我们首先把button的文件改为'sssss',同时修改了文本框的背景色

 

   如图:

 

 

 

 简单的交互有了,我们稍微修改一下,如何能给控件加上事件是否就更好了?我们就来测试一下

    修改脚本文件:

          this.Registor(tt1, "f1");            this.Registor(tt2, "f2");

            var temp = @"Button1.Content='sssss'TextBox1.Text='dsfadfaa'TextBox1.Background =Backgrounddef light(s, e):  s.Foreground = f1

def dark(s, e):  s.Foreground = f2def click(s,e):  TextBox1.Text='你单击了我哦!'Button1.MouseEnter += lightButton1.MouseLeave += darkButton1.Click += click";

     我们给button添加了三个事件,单击,鼠标移入与移出事件,定义相就的处理函数,我们来看看是否可以达到我们期望的效果:

  

1:鼠标移入button控件,颜色改为黄色

               

 

2:鼠标移出button控件,颜色改为红色

               

 

3:鼠标单击以后,改变文本框的内容

              

 

这次我们试验了一下,让页面上的控件参与脚本运算,包括修改控件属性,给控件添加事件并定义事件处理程序,请关注下一篇文章

 

 

  

 

 

 

转载于:https://www.cnblogs.com/wangxh/archive/2010/10/24/1859753.html

最新回复(0)