我有一個Windows Phone頁面(MainPage),並且在代碼隱藏中,我想動態地添加一個事件處理程序 - 例如MouseEnter事件。訣竅是,我希望這個事件處理程序有事件參數作爲一個對象:AddEventHandler當事件處理程序參數是方法中的對象時
private void MyEventHandler(object sender, object args)
{
}
(這樣做的原因是,這是一個簡單的例子)
這工作:
this.MouseEnter += MyEventHandler;
但是,這將引發ArgumentException:
var handlerType = Type.GetType("System.EventHandler`1").
MakeGenericType(typeof(EventArgs));
this.GetType().GetEvent("Hold").AddEventHandler(
this, Delegate.CreateDelegate(handlerType, this, "MyEventHandler"));
和異常的消息是: 「無法綁定到目標方法,因爲它的簽名或安全透明度與代理類型的兼容性不兼容。」如果我更改事件處理程序的簽名,所有作品,但我想保留它作爲「對象」或「動態」。
如何添加事件處理程序與AddEventHandler調用?
任何幫助,高度讚賞。
要使用非靜態的MyMethod,例如如果將它移動到Test並將其「static」更改爲「public」,則將'var te = Delegate.CreateDelegate(e.EventHandlerType,new EventHandler(MyMethod).Method);'var var = Delegate.CreateDelegate e.EventHandlerType,t,new EventHandler(t.MyMethod).Method);'。剛剛花了一段時間弄清楚這一點,並希望分享。 – ulatekh