アーカイブ

投稿のタグ "ドラッグ&ドロップ"

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 DragLeave。
パブリックイベント DragEventHandler DragOverイベント。
パブリックイベント DragEventHandlerドロップ。

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

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

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

/ /プロパティ
公共の IDataObjectのデータ{[SecuritySafeCritical]取得;}
公共のboolは取得または設定します。取扱
}
}

名前空間リファレンスSystem.Windows.Controls
{
パブリック抽象クラスコントロール :FrameworkElementは
{
保護仮想無効 OnDragEnterイベント(しているDragEventArgs E);
保護仮想無効 OnDragLeave(しているDragEventArgs E);
保護されている仮想ボイド OnDragOverイベント(しているDragEventArgs E);
保護されている仮想ボイド OnDrop(しているDragEventArgs E);
}
}

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

使用

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

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

制限事項

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

  • 全くドロップソースのサポート(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();
    }
    </ SCRIPT>
    <! - Silverlightのドロップターゲットイベントをトリガするには、JavaScriptのドロップターゲットイベントを使用する - >

    ondragover= "handleDragOver(event)" ID = "silverlightControl" OnDragEnterイベント= "handleDragEnter(イベント)" OnDragOverイベント= "handleDragOver(イベント)"
    > ondragleave = "handleDragLeave(イベント)" ondrop = "handleDropEvent(イベント)">

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

    デモアプリケーション

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

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

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

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

    フィードバック

    私たちはSilverlightにドラッグ·アンド·ドロップを追加することに興奮しているが、我々は改善する/終了するのがたくさんある知り、私たちがリリースさは、単にベータ版です。 いつものように、あなたのフィードバックは非常に高く評価され、私たちは作業の優先順位を助けるために重要なデータ·ポイントとして使用されます。 ありがとう!

    Technoratiのタグ: