MSDN says on event setters:EventSetters在主題資源字典
事件制定者不能包含在主題資源字典中的風格來使用。這是因爲運行時的主題資源字典通常是鬆散的二進制XAML(BAML)文件,並且在定義處理程序的代碼隱藏代碼可以存在的地方沒有定義任何範圍。
這是由the first answer to this SO question證實,其中指出:
資源XAML不能有隱藏文件代碼,它們通常被稱爲「鬆散XAML」。你可以在關於EventSetter的msdn中閱讀。
但是,我還不明白事件制定者的侷限性。我曾嘗試使用資源字典的代碼隱藏文件。我已經爲在所述資源字典中的樣式中定義的模板中包含的控件事件分配了一個事件處理程序 - 並且它工作正常。
另一方面,將事件設置器添加到同一資源字典中的樣式會導致異常。
我碰到一個特殊情況,它恰好工作?
或者在模板中設置事件處理程序總是可以工作,但如果是這樣的話,爲什麼我不能在同一個資源字典中的樣式中使用事件設置程序?
我的問題歸結爲:
究竟是MSDN的說法,主題資源字典是往往寬鬆二進制XAML意思 - 多久,在什麼情況下到底是什麼?
您是否將代碼隱藏用於主題資源字典? –
@voroninp:是的;比照帶有聲明的段落「我嘗試使用資源字典的代碼隱藏文件。「 –
ResourceDictionary可能存在代碼隱藏,這種方法在C#2010中的MacDonald's book-Pro WPF中描述過,我認爲殘疾風格的事件發生器只是設計而已,但我同意你不清楚爲什麼 –