2009-11-30 30 views
1

什麼是通過IronRuby腳本向XAML中的UI元素添加事件處理程序的最簡短方式?假設:添加事件處理程序的代碼將寫入IronRuby腳本,處理該事件的代碼將位於同一個IronRuby腳本中。IronRuby和處理XAML用戶界面事件

我想要下面的代碼等效於IronRuby。處理一個簡單的button1點擊事件。

public partial class Window1 : Window 
{ 
    public Window1() 
    { 
     InitializeComponent(); 
     button1.Click += new RoutedEventHandler(button1_Click); 
    } 

    void button1_Click(object sender, RoutedEventArgs e) 
    { 
     MessageBox.Show("Hello World!"); 
    } 
} 

回答

2

就我所知,.NET事件暴露爲在IronRuby中使用塊的方法。所以,你可以寫:

button1.click do |sender, args| 
    MessageBox.show("Hello World!") 
end 

This涵蓋其他選項。

+0

+1。這將處理我的大部分需求。我在鏈接中看到.remove語法。這是否意味着它支持某種「.add」語法來添加多個處理程序,或者它是多次調用相同的單擊(&)語法。 – BuddyJoe 2009-11-30 19:41:59

+0

刪除示例使用此序列:'button.click(&on_click); button.click.remove(on_click)' – 2009-11-30 20:18:33

+0

我認爲這意味着使用不同的參數(甚至是相同的參數)多次調用'click'將會註冊幾個處理程序,與C#中的一樣。 – 2009-11-30 20:19:25

1

如果對事件更有意義,您也可以使用add來訂閱事件。

p = Proc.new do |sender, args| 
    MessageBox.show("Hello World!") 
end 

# Subscribe 
button1.click.add p 

# Unsubscribe 
button1.click.remove p 
+0

也很酷的方式來做到這一點。 +1 – BuddyJoe 2009-12-01 21:06:50

+0

請記住,您也可以從方法中獲取這些「Proc」對象:「button1.click.add method(:foo)」,其中:foo是方法名稱 – 2009-12-29 15:12:41