バージョン

Drag and Drop Framework での作業

このトピックは、組織図および Drag and Drop Framework でドラッグ アンド ドロップを実装する方法を示します。

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

概要

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

プレビュー

以下は階層を再整理するためにドラッグされるノードのプレビューです:

xamOrgChart Drag and Drop 01.png

図 1: ノードのドラッグ

要件

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

  • Infragistics.WPF.OrgChart

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. ドロップ ターゲットとして xamOrgChart を構成します。

XAML の場合:

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

Visual Basic の場合:

Dim orgChart As New XamOrgChart()

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

' 組織図をドロップ ターゲットにします
DragDropManager.SetDropTarget(orgChart, dropTarget)

C# の場合:

XamOrgChart orgChart = new XamOrgChart();

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

//組織図をドロップ ターゲットにします
DragDropManager.SetDropTarget(orgChart, dropTarget);
  1. ノード ドラッグ ソースドロップ ターゲットを作成します。

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

  • OrgChartNode - そのオブジェクトは実際の組織図ノードです。このクラスは親および子ノード、ノードによって表示されるデータ、ノードを作成するために使用される OrgChartNodeLayout オブジェクトへの参照に関する情報を伝達します。

  • OrgChartNodeControl - そのオブジェクトは、OrgChartNode オブジェクトのビジュアル表現として役割を果たします

したがって、ドラッグ ソースおよびドロップ ターゲットは、 OrgChartNodeControl オブジェクトです。

パンニングによって、ノードが組織図の表示可能な領域から外れる時は常に、そのノードに関連した OrgChartNodeControl が破棄されます。また、ノードの子が縮小されると、その OrgChartNodeControls は破棄されます。

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

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

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

  1. NodeControlAttachedEvent にイベント ハンドラーを指定します。 XAML の場合:

<ig:XamOrgChart
    NodeControlAttachedEvent="OrgChart_NodeControlAttachedEvent">
</ig:XamOrgChart>
  1. ドラッグ ソースおよびドロップ ターゲットとして新しい OrgChartNodeControl を構成します。 Visual Basic の場合:

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

    'dragSource.DragChannels = assign drag channels
    AddHandler dragSource.Drop, AddressOf 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 OrgChart_NodeControlAttachedEvent(object sender, OrgChartNodeEventArgs 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)
    'ドラッグされる OrgChartNodeControl オブジェクトを取得します
    Dim draggedNodeControl As OrgChartNodeControl = _
        TryCast(e.DragSource, OrgChartNodeControl)

    'ドラッグされる OrgChartNode オブジェクトを取得します
    Dim draggedNode As OrgChartNode = draggedNodeControl.Node

    '基となるデータを取得します
    Dim data As Object = draggedNode.Data

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

C# の場合:

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

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

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

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