2012-05-01 5 views
3

私は、MS Expression Blend SDK for .NET 4のWPFでSystem.Windows.Interactivity.Interactionを使用しようとしています。問題は、そこにInteraction.Triggersという添付プロパティが見つかりません。 Interactionクラスは存在しますが、Equals、GetBehaviors、GetTriggers、ReferenceEqualsという4つのメンバーしか見ることができません。 私は私のプロジェクトでSystem.Windows.Interactivity.dllへの参照のプロパティを見て、パスがWPFでInteraction.Triggersを使用

「Cであることがわかった:\プログラムファイル(x86の)\マイクロソフト のSDK \表現\ブレンド。 NETFramework \ V4.0 \ライブラリ\ System.Windows.Interactivity.dll」

だから、私はILDisassеmblerとそのパス上のファイルを開いたとインタラクションクラスは、実際にプロパティ添付のトリガーが、プロパティを持っていることがわかりましたプライベートとして宣言されています!それから、Prism SDKの\ Lib \ Desktopディレクトリに同じdllを開き、そこに同じ状況が見つかった。これらのdllのバージョンは2.0.20525.0です。また、System.Windows.Interactivity dllを持つSystem.Windows.Interactivity.xmlファイルもあります。その中で私はTriggersPropertyについて次のように見つけました:

このプロパティは公に公開されていませんこれにより、クライアントはGetTriggersおよびSetTriggersメソッドを使用して コレクションにアクセスし、コレクションが存在することを保証し、使用前に設定されます。

しかし、そこにはどのSetTriggersメソッドも見つかりませんでした。ところで、Silverlightのインタラクションは、パブリックメンバーとしてTriggersPropertyを持っています。

私はWPFでInteraction.Triggersを使用している多くの例を見てきましたが、問題はないはずです。私は間違って何をしていますか?

答えて

4

まあ、間違いなく奇妙なことが起こっています。ここに私が見つけたものです:プリズム4.1からSystem.Windows.Interactivity.dllを使用して

  • 、Interaction.TriggersPropertyはVS2010内のオブジェクトブラウザで公共フィールドとして表示されます。
  • 同じアセンブリは、TriggersPropertyがILDASMのプライベートフィールドであることを示しています。
  • Blend SDK for .NET 4のSystem.Windows.Interactivity.dllを使用すると、TriggersPropertyはオブジェクトブラウザに表示されません。
  • 同じアセンブリは、TriggersPropertyがILDASMのプライベートフィールドであることを示しています。

私は説明がありません。しかし、WPF XAMLに<i:Interaction.Triggers>と書いただけで、Prism 4.1からSystem.Windows.Interactivity.dllを参照すると、期待どおりに動作すると言えます。

ILDASMのバグであるかどうかを確認するために、いくつかの他のフレームワーククラスを調べてみましたが、すべて正しいアクセス修飾子が付いています。だから私はなぜプリズム版が動作するのか分からないが、まさにそのように思える。私はそれを必要としなかったので、まっすぐなBlend SDKバージョンを試していません。

編集:もう少し情報:Resharperで掘り下げてみると、Interaction.TriggersPropertyはどこにも使われていないことがわかりました。しかし、Interaction.GetTriggersは私のWPFコード全体に使用されています。だから私はXAMLバインディングリフレクションの魔法があることを賭けている。私はそれを理解していないので "魔法"と言う。どうやらBlend SDKの人々は、XAMLのBehaviors and Triggers添付プロパティだけを使うべきだと思っていますが、Prismの人々はコードからもそれを使用できるはずだと思っています。

+0

第1弾または第2弾にタイプミスがあると思います。 ILDASMではオブジェクトブラウザーやプライベートでは公開できませんが、2つの異なるライブラリーです。 – XanderMK

+1

タイプミスはありません。これは、オブジェクトブラウザとILDASMの表示方法が異なります。これらのファイルは、2つのツールにロードされているファイルと同じです。あなたが私を信じないならば、自分で試してみてください。 –

+0

はい、これは動作します。私は初めて何かミスタイプする必要があります。 Interaction.GetTriggersは、まずInteraction.Triggersプロパティが設定されているかどうかをチェックし、それ以外の場合は設定します。また、Interaction.GetTriggersは、WPFでInteraction.Triggersを取得する唯一の正当な方法です。ところで、何らかの理由で、Interaction.Triggersプロパティの名前が "ShadowTriggers"です。 WPFでは、Silverlightについてはわかりません。 – XanderMK

関連する問題