バージョン 24.2 (最新)

Drag and Drop Framework を使った作業

このトピックでは、NetworkNode および Drag and Drop Framework を使ったドラッグ アンド ドロップの実装方法を説明します。

トピックは以下のとおりです。

概要

ドラッグ アンド ドロップを実装している場合、階層の基本データは手動で更新する必要があります。これは xamNetworkNode コントロールの必要条件であるため、変更を反映することがあります。

プレビュー

以下は、ネットワーク構造を再編成する、ドラッグされているノードのプレビューです。

xamNetworkNode Drag and Drop 01.png

図 1: ノードのドラッグ

要件

必要な NuGet パッケージの参照:

  • Infragistics.WPF.NetworkNode

NuGet フィードのセットアップと NuGet パッケージの追加の詳細については、NuGet フィード ドキュメントを参照してください。

手順

  1. 名前空間宣言を追加します。

    1. XML 名前空間宣言を XAML ファイルに追加します:

XAML の場合:

xmlns:ig="http://schemas.infragistics.com/xaml"
  1. コード ビハインドに using/imports を配置します。

Visual Basic の場合:

Imports Infragistics.Controls.Maps
Imports Infragistics.DragDrop

C# の場合:

using Infragistics.Controls.Maps;
using Infragistics.DragDrop;
  1. Drop Target として xamNetworkNode を構成します。

XAML の場合:

<ig:XamNetworkNode>
    <ig:DragDropManager.DropTarget>
        <ig:DropTarget IsDropTarget="True" />
    </ig:DragDropManager.DropTarget>
</ig:XamNetworkNode>

Visual Basic の場合:

Dim networkNode As New XamNetworkNode()
' 新しい DropTarget オブジェクトを作成します
Dim dropTarget As New DropTarget()
dropTarget.IsDropTarget = True
' NetworkNode を Drop Target にします。
DragDropManager.SetDropTarget(networkNode, dropTarget)

C# の場合:

XamNetworkNode networkNode = new XamNetworkNode();

//新しい DropTarget オブジェクトを作成します
DropTarget dropTarget = new DropTarget();
dropTarget.IsDropTarget = true;

// NetworkNode を Drop Target にします。
DragDropManager.SetDropTarget(networkNode, dropTarget);
  1. ノード ドラッグ ソースドロップ ターゲットを作成します。

ノードで作業するため、xamNetworkNode コントロールは 2 つのキー クラスを使用します:

  • NetworkNodeNode - そのオブジェクトは実際の Network ノードです。このクラスは、親ノードと子ノード、ノードが表示するデータ、ノードの作成のために使用される NetworkNodeNodeLayout オブジェクトへの参照に関する情報を持っています。

  • NetworkNodeNodeControl - そのオブジェクトは NetworkNodeNode オブジェクトのビジュアル表現として機能します。

そのため、Drag Sources および Drop Targets は NetworkNodeNodeControl オブジェクトです。

ノードがパンニングのために NetworkNode の可視領域から出るときは常に、そのノードに関連する NetworkNodeNodeControl が破棄されます。また、ノードの子が折り畳まれるときは、その NetworkNodeNodeControls が破棄されます。

ノードを表示する必要がある場合、そのノードに関連する新しい NetworkNodeNodeControl が作成され、 NodeControlAttachedEvent が発生します。

Drag and Drop Framework で作業をする場合、その作成時に DragSource および DropTarget プロパティを NetworkNodeNodeControl オブジェクトに添付する必要があります。

Note

注: 場合によっては、ドラッグされるノードのドロップ ターゲットに制限があります (社員だけを部署にドロップできるなど)。このビヘイビアーは、Drag and Drop Framework のドラッグ アンド ドロップ チャネルを使用して達成できます。

  1. NodeControlAttachedEvent にイベント ハンドラーを指定します。

XAML の場合:

<ig:XamNetworkNode    NodeControlAttachedEvent="NetworkNode_NodeControlAttachedEvent">
</ig:XamNetworkNode>
  1. 新しい NetworkNodeNodeControl を Drag Source および Drop Target として構成します。

Visual Basic の場合:

Private Sub NetworkNode_NodeControlAttachedEvent(sender As Object, e As NetworkNodeNodeEventArgs)
    ' 新しい DragSource  オブジェクトを作成します
    Dim dragSource As New DragSource()
    dragSource.IsDraggable = True

    'dragSource.DragChannels = assign drag channels
    dragSource.Drop += Node_Drop

    ' ノードをドラッグ ソースにします
    DragDropManager.SetDragSource(e.Node, dragSource)

    ' 新しい DropTarget オブジェクトを作成します
    Dim dropTarget As New DropTarget()
    dropTarget.IsDropTarget = True

    'dropTarget.DropChannels = assign drop channels
    ' ノードをドロップ ターゲットにします
    DragDropManager.SetDropTarget(e.Node, dropTarget)
End Sub

C# の場合:

private void NetworkNode_NodeControlAttachedEvent(object sender, NetworkNodeNodeEventArgs e)
{
    //新しい DragSource  オブジェクトを作成します
    DragSource dragSource = new DragSource();
    dragSource.IsDraggable = true;

    //dragSource.DragChannels = assign drag channels
    dragSource.Drop += Node_Drop;

    //ノードをドラッグ ソースにします
    DragDropManager.SetDragSource(e.Node, dragSource);

    //新しい DropTarget オブジェクトを作成します
    DropTarget dropTarget = new DropTarget();
    dropTarget.IsDropTarget = true;

    //dropTarget.DropChannels = assign drop channels
    //ノードをドロップ ターゲットにします
    DragDropManager.SetDropTarget(e.Node, dropTarget);
}
  1. ドラッグ ソースの Drop イベントを処理します。

Visual Basic の場合:

Private Sub Node_Drop(sender As Object, e As DropEventArgs)
    ' ドラッグされた NetworkNodeNodeControl オブジェクトを取得します。
    Dim draggedNodeControl As NetworkNodeNodeControl = _
        TryCast(e.DragSource, NetworkNodeNodeControl)

    ' ドラッグされた NetworkNodeNode オブジェクトを取得します。
    Dim draggedNode As NetworkNodeNode = draggedNodeControl.Node
    '基となるデータを取得します
    Dim data As Object = draggedNode.Data

    'TODO: 基となるデータを修正します
End Sub

C# の場合:

private void Node_Drop(object sender, DropEventArgs e)
{
    // ドラッグされた NetworkNodeNodeControl オブジェクトを取得します。
    NetworkNodeNodeControl draggedNodeControl =
        e.DragSource as NetworkNodeNodeControl;

    // ドラッグされた NetworkNodeNode オブジェクトを取得します。
    NetworkNodeNode draggedNode = draggedNodeControl.Node;

    //基となるデータを取得します
    object data = draggedNode.Data;

    //TODO: 基となるデータを修正します
}

== 関連トピック