612379 ランダム
 HOME | DIARY | PROFILE 【フォローする】 【ログイン】

「東雲 忠太郎」の平凡な日常のできごと

「東雲 忠太郎」の平凡な日常のできごと

【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! --/--
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x
2024.06.09
XML
カテゴリ:WPFC#.NET


ListViewItemを別のListViewにドラッグアンドドロップするには、いくつかのステップが必要です。まず、ListView内の項目をドラッグ可能にし、次に別のListViewにドロップ可能にする必要があります。以下に、基本的な手順とサンプルコードを示します。


### ステップ1: ListViewの準備


まず、2つのListViewを作成し、それぞれのListViewに項目を追加します。


```xml

<!-- MainWindow.xaml -->

<Window x:Class="WpfApp.MainWindow"

        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"

        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"

        Title="MainWindow" Height="450" Width="800">

    <Grid>

        <Grid.ColumnDefinitions>

            <ColumnDefinition Width="*"/>

            <ColumnDefinition Width="*"/>

        </Grid.ColumnDefinitions>

        <ListView x:Name="sourceListView" Grid.Column="0" AllowDrop="True" PreviewMouseLeftButtonDown="ListView_PreviewMouseLeftButtonDown">

            <ListViewItem Content="Item 1"/>

            <ListViewItem Content="Item 2"/>

            <ListViewItem Content="Item 3"/>

        </ListView>

        <ListView x:Name="targetListView" Grid.Column="1" AllowDrop="True" Drop="TargetListView_Drop"/>

    </Grid>

</Window>

```


### ステップ2: ドラッグアンドドロップのイベントハンドラを実装


次に、ListViewのドラッグアンドドロップのイベントハンドラを実装します。


```csharp

// MainWindow.xaml.cs

using System.Windows;

using System.Windows.Controls;

using System.Windows.Input;


namespace WpfApp

{

    public partial class MainWindow : Window

    {

        private ListViewItem draggedItem;


        public MainWindow()

        {

            InitializeComponent();

        }


        private void ListView_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)

        {

            draggedItem = GetListViewItemFromPoint(e.GetPosition(null), sourceListView);

            if (draggedItem != null)

            {

                DragDrop.DoDragDrop(draggedItem, draggedItem.DataContext, DragDropEffects.Move);

            }

        }


        private void TargetListView_Drop(object sender, DragEventArgs e)

        {

            if (draggedItem != null)

            {

                ListView targetListView = sender as ListView;

                targetListView.Items.Add(draggedItem.DataContext);

                draggedItem = null;

            }

        }


        private ListViewItem GetListViewItemFromPoint(Point position, ListView listView)

        {

            HitTestResult hitTestResult = VisualTreeHelper.HitTest(listView, position);

            if (hitTestResult != null)

            {

                DependencyObject obj = hitTestResult.VisualHit;

                while (obj != null && obj != listView)

                {

                    if (obj is ListViewItem)

                    {

                        return (ListViewItem)obj;

                    }

                    obj = VisualTreeHelper.GetParent(obj);

                }

            }

            return null;

        }

    }

}

```


### ステップ3: ドラッグアンドドロップの操作を処理


最後に、ドラッグアンドドロップの操作を処理する必要があります。`ListView_PreviewMouseLeftButtonDown` メソッドでは、マウスの左ボタンが押されたときにListViewItemを取得し、ドラッグアンドドロップ操作を開始します。`TargetListView_Drop` メソッドでは、ドロップ操作が行われたときに新しいListViewに項目を追加します。


これで、ListViewItemを別のListViewにドラッグアンドドロップできるようになりました。






お気に入りの記事を「いいね!」で応援しよう

Last updated  2024.06.09 13:52:36



© Rakuten Group, Inc.