のアーカイブ

11月のアーカイブ2009年

Silverlightのドラッグ&ドロップAPI

2009年11月28日 13コメント

はじめ

ドラッグ&ドロップは、一般的なUXのパラダイムとのリクエストが特徴です。 Silverlight 4のベータ版では、我々は、画像ファイルをドラッグしてSilverlightアプリケーションにそれらをドロップするの最も一般的なシナリオを有効にするAPIの基本セットを導入し、そして我々は、私たちは、APIの変更なしで道をより多くのドラッグアンドドロップ機能を公開できるようにAPIを設計、うまくいけば。

API

以下の新しいAPIのコアは、次のとおりです。

 名前空間 System.Windows 
{
パブリック抽象クラスのUIElement:のDependencyObject
{
/ /フィールド
をpublic static readonly DependencyPropertyにAllowDropProperty。

/ /イベント
パブリックイベント DragEventHandlerのdragEnter。
パブリックイベント DragEventHandler離れたとき。
パブリックイベント DragEventHandler DragOverイベント。
パブリックイベント DragEventHandlerドロップ;

/ /プロパティ
公共のブール値 AllowDropを{取得または設定します。}
}

sender, DragEventArgs e); 公共デリゲートボイド DragEventHandler( オブジェクト送信者、しているDragEventArgs電子);

公共sealedクラスしているDragEventArgs。RoutedEventArgs
{
/ /メソッド
公開ポイントの場合はgetPosition(UIElementのrelativeToを);

/ /プロパティ
公共の IDataObjectのデータは、{[SecuritySafeCritical]取得;}
公共のブール値は、処理{取得または設定します。}
}
}

名前空間 System.Windows.Controls
{
パブリック抽象クラスControl:FrameworkElement
{
保護仮想無効 OnDragEnterイベント(しているDragEventArgs電子);
保護仮想無効 OnDragLeave(しているDragEventArgs電子);
保護された仮想ボイド OnDragOverイベント(しているDragEventArgs電子);
保護された仮想ボイド OnDropを(しているDragEventArgs電子);
}
}

  • AllowDropを:これは、エレメントがドロップターゲットかどうかを示す、依存関係プロパティです。
  • のdragEnter、離れたとき、DragOverイベント&Dropは:これらのルーティングイベントです。 彼らはバブルアップし、唯一の真のAllowDropを設定された要素で火災。
  • OnDragEnterイベントは、OnDragLeave、OnDragOverイベント&OnDropを:これらはサブクラスがオーバーライドする仮想関数を保護されています。
  • しているDragEventArgs:このクラスは、ドロップターゲットイベントハンドラまたはメソッドのオーバーライドは、ドラッグまたはドロップされたデータにアクセスすることができます。

使用法

Silverlightのドラッグ&ドロップAPIを使用するために主に2つの方法があります。

  • Silverlightアプリケーションは、それらのドロップターゲットイベントを処理し、イベントハンドラでドロップされたファイルを処理することができます。
  • Silverlightコントロールは、ドラッグアンドドロップされたデータを処理するために、それらのドロップターゲット仮想関数をオーバーライドし、自身がドロップターゲットとなるように有効にすることができます。

制限事項

Silverlight 4のベータ版に同梱されてドラッグアンドドロップ機能は、最も一般的なシナリオが可能になります:ファイルのドロップターゲットとしてのSilverlightプラグイン。 現在の実装では、次の制限事項を注意してください。

  • はドロップソースのサポート(QueryContinueDrag&付いた状態では)ありません。
  • しているDragEventArgsにはDragDropEffectsまたはDragDropKeyStatesはありません。
  • ドラッグされたオブジェクトまたはDragDropEffectsのためのビジュアルはありません。
  • 唯一のファイルのドラッグ&ドロップがサポートされています。
    • すべてのドロップターゲットイベントには、ファイルをドラッグアンドドロップされている時のみ発動。
    • IDataObjectを、DataObjectおよびDragEventArgs.Dataは1つの形式のみサポートしています:"FileDropを"、およびデータは、型のFileInfo []である。
  • IDataObjectのメソッドのほとんどは、て、NotImplementedExceptionをスローする。
  • ドラッグとWindows上で動作するように降下するため、Silverlightプラグインには、ウィンドウがされている必要があります。 <param name="win​​dowless" value="true"/>が指定されている場合、別の単語では、、ドロップイベントは発生しません。
  • Mac上のSilverlightプラグインが常にウィンドウなので、あなたは、SilverlightのドロップイベントをトリガするためにはJavaScriptのドロップイベントをフックする必要があります。 あなたのSilverlightアプリケーションは、同様にWindowsのようにMac上のファイルのドロップをサポートしたい場合は、別の単語では、は、ホストするHTMLやASPXページに次のスクリプトとSilverlightプラグインの属性を追加する必要があります。
     <! - HEADタグの終了前に次のスクリプトを追加します - > 
    <script type= "text/javascript">
    機能 handleDragEnter(oEvent){
    / /はデフォルトの操作を防止
    oEvent.preventDefault();

    VARフラグ= silverlightControl.dragEnter(oEvent);

    我々はそれを処理する/ /場合に成功してイベントの伝播を停止する
    場合 (フラグ)
    oEvent.stopPropagation();
    }

    機能 handleDragLeave(oEvent){
    / /はデフォルトの操作を防止
    oEvent.preventDefault();

    VARフラグ= silverlightControl.dragLeave(oEvent);

    我々はそれを処理する/ /場合に成功してイベントの伝播を停止する
    場合 (フラグ)
    oEvent.stopPropagation();
    }

    機能 handleDragOver(oEvent){
    / /はデフォルトの操作を防止
    oEvent.preventDefault();

    VARフラグ= silverlightControl.dragOver(oEvent);

    我々はそれを処理する/ /場合に成功してイベントの伝播を停止する
    場合 (フラグ)
    oEvent.stopPropagation();
    }

    機能 handleDropEvent(oEvent){

    / /はデフォルトの操作を防止
    oEvent.preventDefault();

    VARフラグ= silverlightControl.dragDrop(oEvent);

    我々はそれを処理する/ /場合に成功してイベントの伝播を停止する
    場合 (フラグ)
    oEvent.stopPropagation();
    }
    </スクリプト>
    <! - SilverlightのドロップターゲットイベントをトリガーするJavaScriptのドロップターゲットイベントを使用する - >

    ondragover= "handleDragOver(event)" ID ="silverlightControl"乗ったとき="handleDragEnter(イベント)"ondragoverイベント="handleDragOver(イベント)"
    > ondragleave ="handleDragLeave(イベント)"OnDrop="handleDropEvent(イベント)">

  • DragEventArgs.DataはDropイベントでのみアクセス可能です。 のdragEnter、dragOverと離れたときにDragEventArgs.Dataにアクセスすると、可能性がありますSecurityExceptionを とDragEventArgs.DataからFileInfoオブジェクトのディレクトリ、ディレクトリ名またはFullNameプロパティにアクセスすると、ArgumentNullExceptionを引き起こす可能性があります。

    デモアプリケーション

    下のデモアプリケーションは、次のとおりです。

  • 左上のネストされたグリッドがいるDragEventArgsの情報を表示するには、ドロップターゲットイベントハンドラを使用してください。
  • 右上のネストされたグリッドは、それが画像の場合、ドロップされたファイルをレンダリングするためにOnDropをメソッドをオーバーライドImageDropTargetのユーザーコントロールが含まれています。
  • 下のリストボックスは、ドロップターゲットイベントを、それらのバブルアップ、としているDragEventArgs情報のシーケンスを示しています。

    Click to run DragDropDemo if you have Silverlight 4 Beta installed.

    あなたは、完全なソースを見つけることができますここで

    フィードバック

    我々は、Silverlightにドラッグ&ドロップを追加するために興奮している一方で、我々は改善する/終了するのがたくさんある知っている、と私たちは解放するだけでベータ版です。 いつものように、あなたのフィードバックが高く評価され、そして私たちは仕事を優先順位を決定する手助けとなる重要なデータポイントとして使用されます。 ありがとう!

    Technoratiのタグ: