学习C#.net有两三个星期了, 怎奈书本略厚, 工作略繁杂, 于是各种跳章, 好不容易跳到了WPF的章节.
看了<<C#与.NET4高级程序设计>>第27章, 就突然产生了一个想法.
总觉得WPF是在跟网页制作较劲, 网页的HTML标签一行一行加载下来, 如果有一行button加载完了, 下面可以写一个js标签, 显示地执行一段函数.
于是我想XAML是不是也能这样呢?
比如, 在一个Button加载完之后执行一条语句, 跳一个MessageBox什么的? 可貌似, 在XAML中不能显式调用函数...
正所谓初生牛犊不怕虎, 于是我这样做:
1, 首先创建一个能在XAML中写的标签, 为了造成一层轻薄的假象, 这个标签就叫做Script好了~ Script标签下的只能调用函数...怎么调用呢? 于是我想到用属性调用. 这个属性拥有函数般的名字, 而它的value其实只是函数的参数...
真正残念
public class Script:UIElement { public string ShowMessage { set { MessageBox.Show(value.ToString()); } } }
2, 在XAML中添加命名空间, 在这里我还算是老实地带上了local的前缀...
<Window x:Class="WpfTest.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="clr-namespace:WpfTest" Title="MainWindow" Height="350" Width="525">
3, 在window的内容布局控件中随便加点Button什么的, 然后把Script放在后面, 比如这样
<StackPanel> <Button>1231231231</Button> <Button>1231231231</Button> <Button>1231231231</Button> <Button>1231231231</Button> <Button>1231231231</Button> <local:Script ShowMessage="haha" /> </StackPanel>
4, 运行...
果然, 在Button add到StackPanel的Children中之后, 实例化Script并对这个带有函数般名字的属性ShowMessage设置的时候, MessageBox出现了.
实验到此结束, 当然这个实验几乎没有任何意义. 不过本人算是心满意足地在XAML中显示调用了函数.
然后, 这个时候, 对于习惯了C/C++编译后运行的我来说, 有趣的事情发生了.
各位可以试着随意更改Script标签上面的按钮, 比如添加一个Button或是删除一个Button什么的, 随着设计器的刷新, MessageBox.Show(value.ToString())也将又一次地被执行到.
哈哈, 少见多怪了. 但的确很有趣不是吗?