建立自定義路由事件大體分為三個步驟:
(1)、宣告並註冊路由事件。
(2)、為路由事件新增clr事件包裝。
(3)、建立可以激發路由事件的方法。
下面用乙個例子來展示這個過程:
首先建立乙個routedeventargs類的派生類,並為其新增clicktime屬性:
public
class reporttimeeventargs : routedeventargs
public datetime clicktime
}
然後建立乙個button類的派生類並按前述步驟為其新增路由事件:
public
class timebutton : button
remove
}//激發路由事件,借用click事件的激發方法
protected
override
void
onclick()
}
介面的xaml**:
x:class="wpfwindows8.window8_3_2"
xmlns=""
xmlns:x=""
xmlns:d=""
xmlns:mc=""
xmlns:local="clr-namespace:wpfwindows8"
xmlns:localmodel="clr-namespace:wpfwindows8.model"
mc:ignorable="d"
title="routed event"
x:name="window8_3_2"
height="300"
width="300"
localmodel:timebutton.reporttime="reporttimehandler">
x:name="grid_1"
localmodel:timebutton.reporttime="reporttimehandler">
x:name="grid_2"
localmodel:timebutton.reporttime="reporttimehandler">
x:name="grid_3"
localmodel:timebutton.reporttime="reporttimehandler">
x:name="stackpanel_1"
localmodel:timebutton.reporttime="reporttimehandler">
x:name="listbox"/>
x:name="timebutton"
width="80"
height="80"
content="報時"
localmodel:timebutton.reporttime="reporttimehandler"/>
stackpanel>
grid>
grid>
grid>
window>
reporttimehandler的**如下:
private
void
reporttimehandler(object sender, reporttimeeventargs e)
到達 ", timestr, element.name);
this.listbox.items.add(content);
}
執行結果如下
宣告並註冊路由事件
public
static
readonly routedevent reporttimeevent = eventmanager.registerroutedevent
("reporttime", routingstrategy.bubble, typeof(eventhandler), typeof(timebutton));
eventmanager.registerroutedevent方法有四個引數,含義分別為:
第乙個引數string型別,被稱為路由事件的名稱,一般為routedevent變數的字首和clr事件包裝器的名稱一致。
第二個引數為路由事件的策略。wpf路由事件有3種策略:
1.bubble,冒泡式:路由事件由事件激發者出發向它上級容器一層一層路由,直至最外層容器。
2.tunnel,隧道式:事件的路由方向正好與bubble策略相反,由ui樹的樹根向事件激發控制項移動。
3.direct,直達式:模仿clr直接事件,直接將事件訊息送達事件處理器。
第三個引數用於指定事件處理器型別。
第四個引數用於指名路由事件的宿主(擁有者)是哪個型別。這個型別與第乙個引數共同參與一些底層演算法產生這個路由事件的hash code並註冊到程式的路由事件列表中。
自定義事件
public event eventhandleropenprogress private void onopenprogress progresseventargs e if openprogress null openprogress this,e public class progressev...
自定義事件
簡單的自定義事件 首先定義乙個類來監聽客戶端事件,這裡我們監聽鍵盤的輸入。定義乙個委託。public delegate void userrequest object sender,eventargs e 前面的object用來傳遞事件的發生者,後面的eventargs用來傳遞事件的細節,現在暫時沒...
js自定義事件和jQuery自定義事件
1.簡述 js自定義事件是用來擴充套件dom元素的行為的,可以讓dom元素監聽自定義事件,並手動觸發,更加靈活地實現一些操作。jquery自定義事件使用場景更加廣泛一些,不僅限於dom監聽自定義事件,可以任意自定義事件並隨時觸發。用於實現觀察者模式,為大型專案解耦非常方便。2.js自定義事件,js可...