前の手順では、 アプリケーションを設定しましたが、アプリケーションにはまだドラッグアンドドロップ機能を追加していません。この手順では、引き続き、機能を追加するコードをアプリケーションに追加します。
次の手順に従います。
Visual Basic |
コードのコピー
|
---|---|
Imports C1.WPF |
C# コードのコピーusing C1.WPF;
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 イベントにイベントハンドラをアタッチします。これで、アプリケーションは通知を受け取り、ドラッグされた要素を新しい位置に移動できるようになります。
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 の実行時の操作をいくつか確認します。