2012-12-16 75 views
15

MSDN says on event setters:EventSetters在主題資源字典

事件制定者不能包含在主題資源字典中的風格來使用。這是因爲運行時的主題資源字典通常是鬆散的二進制XAML(BAML)文件,並且在定義處理程序的代碼隱藏代碼可以存在的地方沒有定義任何範圍。

這是由the first answer to this SO question證實,其中指出:

資源XAML不能有隱藏文件代碼,它們通常被稱爲「鬆散XAML」。你可以在關於EventSetter的msdn中閱讀。

但是,我還不明白事件制定者的侷限性。我曾嘗試使用資源字典的代碼隱藏文件。我已經爲在所述資源字典中的樣式中定義的模板中包含的控件事件分配了一個事件處理程序 - 並且它工作正常。

另一方面,將事件設置器添加到同一資源字典中的樣式會導致異常。

我碰到一個特殊情況,它恰好工作?

或者在模板中設置事件處理程序總是可以工作,但如果是這樣的話,爲什麼我不能在同一個資源字典中的樣式中使用事件設置程序?

我的問題歸結爲:

究竟是MSDN的說法,主題資源字典是往往寬鬆二進制XAML意思 - 多久,在什麼情況下到底是什麼?

+0

您是否將代碼隱藏用於主題資源字典? –

+0

@voroninp:是的;比照帶有聲明的段落「我嘗試使用資源字典的代碼隱藏文件。「 –

+0

ResourceDictionary可能存在代碼隱藏,這種方法在C#2010中的MacDonald's book-Pro WPF中描述過,我認爲殘疾風格的事件發生器只是設計而已,但我同意你不清楚爲什麼 –

回答

2

這意味着它是自己編譯的,不在代碼後面或在命名空間內。

或者換句話說,沒有代碼部分可以放到一個鬆散的xaml文件中,它可以作爲文本從數據庫中讀入,或者作爲文本在文本中生成並加載而沒有任何編纂關聯。

至於天氣這是否是一個正當理由。這取決於每個開發人員,但這是鬆散的xaml意味着什麼。

編輯:

在回答您的意見,我會想象他們具體指的資源和樣式,因爲這些是最常見的「鬆散的文件」和一般大多數人不代碼文件備份它們。我個人認爲這是一個應對措施。他們可以很容易地添加一個Loose = True屬性並解決這個問題。

實際上,問題不在於鬆散文件的大小或使用頻率,而在於規則是爲了彌補缺失的特徵而產生的。如果他們只是說你不能做x,y,z會容易得多,因爲我們沒有建立對它的支持,而不是說它是因爲任意數量的鬆散xaml文件。

+0

對不起,也許問題是不清楚 - 我知道什麼是鬆散的XAML *。我的問題是關於*常常*這個詞的意思; *在所引用的語境中常常意味着什麼?換句話說,什麼時候確切? –

+0

增加更多,TL; DR它是一個抓獲.. – McDonnellDean