は私のコードがどのように見えるかです:
XAML:
<ListBox Name="LeftBox" Grid.Column="0" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
PreviewMouseLeftButtonDown="Common_PreviewMouseLeftButtonDown"
AllowDrop="True"
Drop="Common_Drop"/>
<ListBox Name="RightBox" Grid.Column="2" HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
PreviewMouseLeftButtonDown="Common_PreviewMouseLeftButtonDown"
AllowDrop="True"
Drop="Common_Drop"/>
私は私のリストボックスにテストデータをロードするために、このメソッドを呼び出します。
private void LoadData()
{
var lstbox1Data = new string[] { "One", "Two", "Three", "Four", "Five" };
var lstbox2Data = new string[] { "Alpha", "Beta", "Theta", "Gamma", "Phi" };
foreach (var item in lstbox1Data)
{
LeftBox.Items.Add(item);
}
foreach (var item in lstbox2Data)
{
RightBox.Items.Add(item);
}
}
これは、実際の実装でありますリストボックス間でDragDrop &リストボックス内で再配置します。私はクラス以下へのデータ&送信者を包ん
private void Common_Drop(object sender, DragEventArgs e)
{
var destLisBox = sender as ListBox;
var dragDropData = e.Data.GetData(typeof(DragDropData)) as DragDropData;
if (dragDropData != null)
{
var dataWhereToInsert = GetDataFromListBox(destLisBox, e.GetPosition(destLisBox));
if (dataWhereToInsert != null)
{
var insertAtIndex = destLisBox.Items.IndexOf(dataWhereToInsert);
if (insertAtIndex >= 0)
{
dragDropData.DragStartSource.Items.Remove(dragDropData.ActualData);
destLisBox.Items.Insert(insertAtIndex, dragDropData.ActualData);
}
}
else
{
dragDropData.DragStartSource.Items.Remove(dragDropData.ActualData);
destLisBox.Items.Add(dragDropData.ActualData);
}
}
}
private static object GetDataFromListBox(ListBox source, Point point)
{
UIElement element = source.InputHitTest(point) as UIElement;
if (element != null)
{
object data = DependencyProperty.UnsetValue;
while (data == DependencyProperty.UnsetValue)
{
data = source.ItemContainerGenerator.ItemFromContainer(element);
if (data == DependencyProperty.UnsetValue)
{
element = VisualTreeHelper.GetParent(element) as UIElement;
}
if (element == source)
{
return null;
}
}
if (data != DependencyProperty.UnsetValue)
{
return data;
}
}
return null;
}
private void Common_PreviewMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
var srcListBox = sender as ListBox;
if (srcListBox != null)
{
var data = GetDataFromListBox(srcListBox, e.GetPosition(srcListBox));
if (data != null)
{
var dragDropData = new DragDropData
{
ActualData = data,
DragStartSource = srcListBox
};
DragDrop.DoDragDrop(srcListBox, dragDropData, DragDropEffects.Move);
}
}
}
注:
public class DragDropData
{
public object ActualData { get; set; }
public ListBox DragStartSource { get; set; }
}
素晴らしい:GetDataFromListBox方法は、から来ている: [http://www.c-sharpcorner.com/uploadfile/dpatra/drag-and-drop-item-in-listbox-in-wpf/]
悪いアドバイス - しかし、XAMLでの名前を追加両方のリストボックス、次にControl.Nameのコードテストを実行します。 –
私はすでにlistBoxesの名前を与えました...しかし、Control.Nameのオプションはありません...(そのような変数はありません) – Ben
Control.Nameによる - 私の意図したもの - 上記のコードではparent.Nameになります。 –