Basic Library for WPF/Silverlight
手順 2:アプリケーションへのコードの追加
製品の概要 > DragDrop Manager > クイックスタート > 手順 2:アプリケーションへのコードの追加

前の手順では、 アプリケーションを設定しましたが、アプリケーションにはまだドラッグアンドドロップ機能を追加していません。この手順では、引き続き、機能を追加するコードをアプリケーションに追加します。

次の手順に従います。

  1. ソリューションエクスプローラに移動し、MainPage.xaml or MainWindow.xaml ファイルを右クリックして[コードの表示]を選択し、コードビューに切り替えます。
  2. コードビューで、次の import 文をページの先頭に追加します。
    Visual Basic
    コードのコピー
    Imports C1.WPF
    

C#
コードのコピー
using C1.WPF;
  1. Page コンストラクタで、MainPage.xaml.cs(または .vb)ファイルまたは MainWindow.xaml.cs (or .vb) ファイルにコードを追加します。次のようになります。
    Visual Basic
    コードのコピー
    Public Sub New()
        InitializeComponent()
        ' C1DragDropManager を初期化します
        Dim dd As New C1DragDropManager()
        dd.RegisterDropTarget(ddGrid, True)
        For Each e As UIElement In ddGrid.Children
            dd.RegisterDragSource(e, DragDropEffect.Move, ModifierKeys.None)
        Next
        AddHandler dd.DragDrop, AddressOf dd_DragDrop
    End Sub
    

C#
コードのコピー
public MainPage()
{
  InitializeComponent();
  // C1DragDropManager を初期化します
  C1DragDropManager dd = new C1DragDropManager();
  dd.RegisterDropTarget(ddGrid, true);
  foreach (UIElement e in ddGrid.Children)
  {
    dd.RegisterDragSource(e, DragDropEffect.Move, ModifierKeys.None);
  }
  dd.DragDrop += dd_DragDrop;
}

このコードは、C1DragDropManager の新しいインスタンスを初期化してから、RegisterDropTarget メソッドを呼び出して、デフォルトでグリッドがドロップ先として機能するように指定します。次に、RegisterDragSource メソッドを呼び出して、ユーザーがグリッド内の要素をドラッグできるように指定します。最後に、DragDrop イベントにイベントハンドラをアタッチします。これで、アプリケーションは通知を受け取り、ドラッグされた要素を新しい位置に移動できるようになります。

  1. MainPage.xaml.cs(または .vb)ファイル または MainWindow.xaml.cs (or .vb) fileで、MainPage クラスの他のすべてのメソッドより下に、次のイベントハンドラを追加します。
Visual Basic
コードのコピー
Private Sub dd_DragDrop(source As Object, e As DragDropEventArgs)
    ' マウスの位置を取得します
    Dim pMouse As Point = e.GetPosition(ddGrid)
    ' グリッド行/列座標に変換します
    Dim row As Integer, col As Integer
    Dim pGrid As New Point(0, 0)
    For row = 0 To ddGrid.RowDefinitions.Count - 1
        pGrid.Y += ddGrid.RowDefinitions(row).ActualHeight
        If pGrid.Y > pMouse.Y Then
        Exit For
        End If
    Next
    For col = 0 To ddGrid.ColumnDefinitions.Count - 1
       pGrid.X += ddGrid.ColumnDefinitions(col).ActualWidth
        If pGrid.X > pMouse.X Then
        Exit For
        End If
    Next
    ' 要素を新しい位置に移動します
    e.DragSource.SetValue(Grid.RowProperty, row)
    e.DragSource.SetValue(Grid.ColumnProperty, col)
End Sub

C#
コードのコピー
private void dd_DragDrop(object source, DragDropEventArgs e)
{
  // マウスの位置を取得します
  Point pMouse = e.GetPosition(ddGrid);
  // グリッド行/列座標に変換します
  int row, col;
  Point pGrid = new Point(0, 0);
  for (row = 0; row < ddGrid.RowDefinitions.Count; row++)
    {
      pGrid.Y += ddGrid.RowDefinitions[row].ActualHeight;
      if (pGrid.Y > pMouse.Y)
      break;
    }
  for (col = 0; col < ddGrid.ColumnDefinitions.Count; col++)
  {
    pGrid.X += ddGrid.ColumnDefinitions[col].ActualWidth;
    if (pGrid.X > pMouse.X)
    break;
  }
 // 要素を新しい位置に移動します
  e.DragSource.SetValue(Grid.RowProperty, row);
  e.DragSource.SetValue(Grid.ColumnProperty, col);
}

このイベントハンドラは、最初にマウスの座標を行/列座標に変換します。次に SetValue メソッドを使用して、ドラッグされた要素の Grid.RowProperty および Grid.ColumnProperty 値を更新します。同様のロジックを使用して、他のタイプのパネルやリストタイプのコントロール内の要素をドラッグしたり、1つのパネルから別のパネルに要素をドラッグすることができます。

ここまでの成果

この手順では、機能を追加するコードをアプリケーションに追加しました。次の手順では、アプリケーションを実行し、DragDropManager for WPF/Silverlight の実行時の操作をいくつか確認します。