0

Microsoft は実際に、WPF で「正常に動作する」Rx/Silverlight Toolkit DragDrop のビルドを提供していますか?

私が言えることから、Rx DragDrop は SL ツールキット (WPF ではない) でのみ利用できます。

SL Toolkit は、WPF (さまざまな #defines) で使用できることを暗示しているようですが、それを行う方法に関する詳細情報は提供していません。

DragDrop が必要な場合、WPF に簡単に移植できますか、それとも 1 億行の SL Toolkit が必要ですか?

4

1 に答える 1

0

Silverlight Toolkit についてはあまりコメントできませんが、Rx についてはコメントできます。

Reactive Extensions (Rx)は、さまざまな「プッシュ」コレクション (イベント、非同期操作など) をファーストクラスの LINQ 対応の合成フレームワークに「持ち上げる」ことを可能にする汎用ライブラリ セットです。Silverlight、XNA、javascript で使用できますが、さらに重要なのは .NET 4.0 と .NET 3.5SP1 で使用できるため、WPF で使用できます。(.NET 3.5SP1 実装は、コア Rx コードを使用しない場合でも非常に役立つ並列タスク ライブラリの多くをバックポートします。)

とはいえ、Rx は汎用なので、WPF でイベントを使用してドラッグ アンド ドロップできる場合は、Rx を使用できます。

ドラッグ アンド ドロップ クエリは次のようになります。

var mouseDowns =
    Observable.FromEvent<MouseButtonEventArgs>(element, "MouseDown");

var mouseMoves =
    Observable.FromEvent<MouseEventArgs>(element, "MouseMove");

var mouseUps =
    Observable.FromEvent<MouseButtonEventArgs>(element, "MouseUp");

var mouseDragPoints =
    (from md in mouseDowns
        select (from mm in mouseMoves.TakeUntil(mouseUps)
                select mm.EventArgs.GetPosition(element))).Switch();

var mouseDragDeltas =
    mouseDragPoints.Skip(1).Zip(mouseDragPoints, (p1, p0) =>
        new Point(p1.X - p0.X, p1.Y - p0.Y));

テストせずにこのコードを簡単にまとめましたがPoint、元のドラッグ開始点からの差分を観察できるはずであり、これはドラッグ操作中にのみ行われます。コードをシンプルに保つようにしました。特定のニーズに合わせて変更する必要があります。

Silverlight Toolkit がさらに何かを提供する場合、それはヘルパー メソッドの比較的薄いレイヤーに過ぎず、それらを再発明するか、Reflector.NET を使用して抽出し、アプリで使用することができます。

それが役立つことを願っています。

于 2011-03-03T00:11:56.903 に答える