用IronRuby创建WPF应用程序
2010-10-09 08:15:31 来源:WEB开发网注:Window、StackPanel、TextBlock、SolidColorBrush和Rectangle 都是WPF类。XAML代码可以轻松地用C#、VB或者IronRuby编程实现。
以上代码会显示一个中等尺寸的独立窗体。该窗体中有StackPanel对象,它是WPF控件,用于定义其子控件采取流布局样式。在 StackPanel中有两个不同对象:一个文本框和一个矩形。在XAML定义的对象皆可被命名以供后续引用亦可匿名(我们的Rectangle对象就命名为mySquare,尽管TextBlock未被命名)。这些对象的属性可以通过两种方式进行赋值:利用XML元素属性(例如:Width="50"),或者所期望的值非初级类型它们的子元素(例如:预期<Rectangle.Fill> 为Brush或者派生自Brush)。
不要陷入WPF和XAML的谜团当中,因为任何人都可以轻松地编写大量代码,让我们用IronRuby运行这些代码。
require 'PresentationFramework'
require 'PresentationCore'
@window = System::Windows::Markup::XamlReader.parse(File.open('my_xaml.xaml', 'r').read)
System::Windows::Application.new.run(@window)
WPF方法Application.Run需要Window作为其中一个参数。如果我们回头看之前的XAML代码,就会发现根元素其实就是 Window,那也是语法分析后所返回的对象。所有在XAML中定义的控件都会作为反射XAML文档结构的控件树返回,Window是根元素,StackPanel作为Window的唯一子元素,Rectangle和TextBlock则作为StackPanel的子元素等等。我们可以通过以下方式添加控件:
@window.find_name("mySquare").class # => "System::Windows::Shapes::Rectangle"
关于CLR类继承的解析
我们提到兼容性、互操作性却忽略了可扩展性。我已经清楚解释了IronRuby与.NET间如何无缝继承,甚至你可以用继承来扩展CLR类。以下是一个示例,让我们再来看一看之前写的文章中用C#创建的Person类。
更多精彩
赞助商链接