バージョン

Infragistics Drag and Drop Framework イベントとイベント引数

Drag and Drop Framework に関連づけられた多数のイベントがあります。ドラッグ アンド ドロップ イベント引数でプロセスのさまざまな側面を変更できます。

基本イベント引数

DragSource オブジェクトによって発生したすべてのイベント引数の基本クラスは、 Infragistics.DragDrop.DragDropEventArgs です。このクラスは役に立つ以下のプロパティを公開します。

  • CopyCursorTemplate - コピー操作が実行される時にカーソルとして使用されるデータ テンプレートを取得または設定できます。

  • Data - このプロパティは、ドラッグされるデータを表すオブジェクトのインスタンスを取得または設定します。

  • DragSource - これはドラッグ操作を開始する UIElement です。

  • DragTemplate - ドラッグされた要素表現に適用されるデータ テンプレートを取得または設定します。

  • DropNotAllowedCursorTemplate - ドラッグ操作が発生するがドロップ ターゲット上でない時にカーソルとして使用されるデータ テンプレートを取得または設定します。

  • DropTarget - このプロパティは、ドロップ ターゲットとしてマークされたオブジェクトのインスタンスを保持します。

  • MoveCursorTemplate - ドラッグ操作がドロップ ターゲット上で実行される時にカーソルとして使用されるデータ テンプレートを取得または設定します。

  • OperationType - ドラッグ アンド ドロップ操作の間に意図したアクションのタイプを取得または設定します。どのカーソルが適用されるかを判断します。

  • OriginalDragSource - このプロパティはオリジナルのレポート ソースを保持します。

イベント

以下はイベントのリストで、発生する順序になっています。

Infragistics Drag and Drop Framework を使用した作業の開始で説明するようにドラッグ アンド ドロップのサンプル アプリケーションをすでに作成してある場合には、さらに改善して、いくつかの視覚効果をドラッグされた要素に追加できます。

DragStart - エンドユーザーが UI 要素のドラッグを開始するとこのイベントが発生します。このイベントはキャンセル可能で、次に発生するイベントは DragCancel イベントになります。

DragDropStartEventArgs オブジェクトが DragStart イベント ハンドラーに渡されます。このオブジェクトはさらに、 DragSnapshotElement という名前のプロパティを提供します。ドラッグされる要素のスナップショットを設定または取得できます。このプロパティのデフォルト値は null です。これによりドラッグされたポップアップに表示されるコンテンツはドラッグ ソース要素のスナップショットです。

XAML の場合:

<ig:DragSource IsDraggable="True" ... DragStart="DragSource_DragStart" ... />

Visual Basic の場合:

Private Sub DragSource_DragStart(ByVal sender As Object,             ByVal e As Infragistics.DragDrop.DragDropStartEventArgs)
    ' ドラッグ ソースを少し暗くします
    e.DragSource.Opacity = 0.7
    Dim txtBlock As New TextBlock()
    txtBlock.Text = "This is drag snapshot TextBlock element."
    txtBlock.FontSize = 18
    ' TextBlock 要素をドラッグ スナップショットとして設定します
    e.DragSnapshotElement = txtBlock
End Sub

C# の場合:

private void DragSource_DragStart(object sender,              Infragistics.DragDrop.DragDropStartEventArgs e)
{
    // ドラッグ ソースを少し暗くします
    e.DragSource.Opacity = 0.7;
    TextBlock txtBlock = new TextBlock();
    txtBlock.Text = "This is drag snapshot TextBlock element.";
    txtBlock.FontSize = 18;
    // TextBlock 要素をドラッグ スナップショットとして設定します
    e.DragSnapshotElement = txtBlock;
}
SL DragDropEventsDragStart.png

DragEnter - ドラッグ アンド ドロップ操作がまだ実行中の間にエンドユーザーがドロップ ターゲット領域に入るとこのイベントが発生します。このイベントはキャンセルできます。

DragOver - エンドユーザーがオブジェクトをドラッグ ターゲット領域上にドラッグするときに限ってこのイベントが発生します。

DragDropMoveEventArgs オブジェクトが DragOver イベント ハンドラーに渡されます。 GetPosition という名前のメソッドがさらに実装されます。UIElement メソッド引数に相対するマウスの位置に関する情報を提供します。

XAML の場合:

<ig:DragSource IsDraggable="True"... DragOver="DragSource_DragOver" ... />

Visual Basic の場合:

Private Sub DragSource_DragOver(ByVal sender As Object,             ByVal e As Infragistics.DragDrop.DragDropMoveEventArgs)
    ' ドラッグ ソース オブジェクトを暗くします
    e.DragSource.Opacity = 0.4
    Dim lightRedBrush As New SolidColorBrush(Colors.Red)
    lightRedBrush.Opacity = 0.2
    ' ドラッグされた要素がその上に移動すると、    ' ターゲットの StackPanel の背景色を変更します
    TryCast(e.DropTarget, StackPanel).Background = lightRedBrush
    ' メインの Grid コンテナーに相対するマウスの位置を取得します
    System.Diagnostics.Debug.WriteLine("Position: " & e.GetPosition(LayoutRoot).ToString())
 End Sub

C# の場合:

private void DragSource_DragOver(object sender,              Infragistics.DragDrop.DragDropMoveEventArgs e)
{
    // ドラッグ ソース オブジェクトを暗くします
    e.DragSource.Opacity = 0.4;
    SolidColorBrush lightRedBrush = new SolidColorBrush(Colors.Red);
    lightRedBrush.Opacity = 0.2;
    // ドラッグされた要素がその上に移動すると、     // ターゲットの StackPanel の背景色を変更します
    (e.DropTarget as StackPanel).Background = lightRedBrush;
    // メインの Grid コンテナーに相対するマウスの位置を取得します
    System.Diagnostics.Debug.WriteLine("Position:"+e.GetPosition(LayoutRoot).ToString());
}
SL DragDropEventsDragOvert.png

DragLeave - ドラッグ アンド ドロップ操作がまだ実行中の間にエンドユーザーがドロップ ターゲット領域から離れるとこのイベントが発生します。

XAML の場合:

<ig:DragSource IsDraggable="True" ... DragLeave="DragSource_DragLeave" ... />

Visual Basic の場合:

Private targetPanelBrush As SolidColorBrush
...
Private Sub DragSource_DragLeave(sender As Object,             e As DragDropEventArgs)
    ' ドラッグされた要素がその上から移動すると、     ' オリジナルのターゲットパネルの背景色を元に戻します
    TryCast(e.DropTarget, StackPanel).Background = originalTargetPanelBrush
    ' ドラッグされた要素の不透明度を元に戻します
    e.DragSource.Opacity = 1
 End Sub

C# の場合:

private SolidColorBrush originalTargetPanelBrush;
...
private void DragSource_DragLeave(object sender,              DragDropEventArgs e)
{
    // ドラッグされた要素がその上から移動すると、
    // オリジナルのターゲットパネルの背景色を元に戻します
    (e.DropTarget as StackPanel).Background = originalTargetPanelBrush;
    // ドラッグされた要素の不透明度を元に戻します
    e.DragSource.Opacity = 1;
}

Drop - UI 要素をドロップ領域にドロップすることによってエンドユーザーがドラッグ アンド ドロップ操作を完了した時にこのイベントが発生します。

DropEventArgs オブジェクトが Drop イベント ハンドラーに渡されます。DropEventArgs クラスは DragDropMoveEventArgs クラスから派生して追加のプロパティをひとつ公開します。これは、ドロップ ターゲットの視覚的な子のリストを含む DropTargetElements プロパティです。

XAML の場合:

<ig:DragSource IsDraggable="True" ... Drop="DragSource_Drop" ... />

Visual Basic の場合:

Private Sub DragSource_Drop(ByVal sender As Object, ByVal e As Infragistics.DragDrop.DropEventArgs)
    Dim originalChart As XamPieChart = TryCast(e.DragSource, XamPieChart)
    If targetChart Is Nothing Then
        targetChart = New XamPieChart()
        targetChart = originalChart
        sourcePanel.Children.Remove(originalChart)
        targetPanel.Children.Add(targetChart)
    End If
End Sub

C# の場合:

private void DragSource_Drop(object sender, Infragistics.DragDrop.DropEventArgs e)
{
    XamPieChart originalChart = (e.DragSource as XamPieChart);
    if (targetChart == null)
    {
        targetChart = new XamPieChart();
        targetChart = originalChart;
        sourcePanel.Children.Remove(originalChart);
        targetPanel.Children.Add(targetChart);
    }
}

DragEnd - ドラッグ アンド ドロップ操作の最後にこのイベントが発生します。これはドラッグ アンド ドロップ操作の間に発生する最後のイベントです。

SL DragDropEventsDragDrop.png

ドラッグ アンド ドロップ操作全体のさまざまな段階で以下のイベントが発生する可能性があります。

DragCancel - DragStart イベントまたは DragEnter イベントのイベント ハンドラのひとつで DragDropCancelEventArgs オブジェクトの Cancel プロパティが True に設定される、またはパラメーターが True に設定されて DragDropManager.EndDrag(bool) 静的メソッドが呼び出されるとこのイベントが発生します。