我一直在嘗試使用System.Windows.Interactivity.Interaction與MS Expression Blend SDK for .NET 4的WPF。問題是我找不到Interaction.Triggers附加屬性那裏。 Interaction類存在,但我只能看到4個成員:Equals,GetBehaviors,GetTriggers,ReferenceEquals。 我看着我的項目中引用System.Windows.Interactivity.dll的屬性,發現路徑是使用WPF中的Interaction.Triggers
「C:\ Program Files文件(x86)的\微軟的SDK \表達\混合。 NETFramework \ V4.0 \庫\ System.Windows.Interactivity.dll」
於是,我開始與ILDisassеmbler這條道路上的文件,發現交互類實際上有附加屬性的觸發,但是屬性被宣佈爲私有!然後,我在Prism SDK的\ Lib \ Desktop目錄中打開了相同的dll,並在那裏找到了相同的情況。這些DLL的版本是2.0.20525.0。還有System.Windows.Interactivity.xml文件與System.Windows.Interactivity dll。其中我發現以下關於TriggersProperty:
此屬性不公開暴露。這會強制客戶端使用GetTriggers和SetTriggers方法訪問 集合,確保集合存在並在使用之前進行設置。
但我沒有找到任何SetTriggers方法。順便說一句,Silverlight的Interaction具有TriggersProperty作爲公共成員。
我見過很多使用WPF的Interaction.Triggers的例子,我假設不應該有任何問題。我究竟做錯了什麼?
我想在第一個或第二個項目符號中有一個錯字。事物不能在對象瀏覽器中公開並且在ILDASM中是私有的,或者它們是兩個不同的庫。 – XanderMK
沒有錯別字。它在對象瀏覽器和ILDASM中以不同的方式顯示。他們肯定是被加載到兩個工具中的相同文件。如果你不相信我,那就試試吧。 –
是的,這有效。我一定是第一次打錯了東西。看起來像Interaction.GetTriggers首先檢查Interaction.Triggers屬性是否已設置,否則設置它。而Interaction.GetTriggers是WPF獲得Interaction.Triggers的唯一合法途徑。順便說一下,出於某種原因,Interaction.Triggers屬性的名稱是「ShadowTriggers」。這在WPF中是真的,對Silverlight沒有把握。 – XanderMK