Как получить выпадающий элемент в списке - WPF - PullRequest
0 голосов
/ 27 декабря 2018

У меня есть несколько списков, и я хочу получить удаленный элемент, но не могу найти его в своем методе.

Есть идеи, как и где он находится?

private void LB1_Drop(object sender, DragEventArgs e)

    {
        ListBox lb = (ListBox)sender;
    }

Ответы [ 3 ]

0 голосов
/ 27 декабря 2018

Здравствуйте, вы можете попробовать это;

 <ListBox HorizontalAlignment="Left" Height="100" Margin="80,125,0,0" VerticalAlignment="Top" Width="100" Drop="ListBox_Drop" AllowDrop="True"  PreviewMouseLeftButtonDown="ListBox_MouseLeftButtonDown">
        <ListBoxItem >item1</ListBoxItem>                                                                                                          
        <ListBoxItem >item2</ListBoxItem>                                                                                                          
        <ListBoxItem >item3</ListBoxItem>                                                                                                          
        <ListBoxItem >item4</ListBoxItem>
    </ListBox>
    <ListBox HorizontalAlignment="Left" Height="100" Margin="200,125,0,0" VerticalAlignment="Top" Width="100" Drop="ListBox_Drop" AllowDrop="True"/>


ListBox dragSource;

    private void ListBox_Drop(object sender, DragEventArgs e)
    {
        ListBox item = (ListBox)sender;
        object data = e.Data.GetData(typeof(ListBoxItem));
        dragSource.Items.Remove(data);
        item.Items.Add(data);
    }

    private void ListBox_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
    {
        ListBox source = (ListBox)sender;
        dragSource = source;
        object item= GetDataFromListBox(dragSource, e.GetPosition(source));
        if (item != null)
        {
            DragDrop.DoDragDrop(source, item, DragDropEffects.Move);
        }
    }

    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;
    }
0 голосов
/ 28 декабря 2018

Какой тип нужно использовать здесь, красный круг.

Мои данные находятся в элементе данных (зеленый)

image01

0 голосов
/ 27 декабря 2018

«Я хочу получить брошенный предмет» Вы имеете в виду выбранные предметы?В то время как изменить значение списка пользователем?Если ТАК, попробуйте этот код

<ListBox Margin="10,0,0,5" Name="lb" VerticalAlignment="Top" Grid.Column="0" Grid.Row="2">
    <ListBoxItem>Item 0</ListBoxItem>
    <ListBoxItem>Item 1</ListBoxItem>
    <ListBoxItem>Item 2</ListBoxItem>
    <ListBoxItem>Item 3</ListBoxItem>
</ListBox>

и код C # здесь

private void GetIndex0(object sender, RoutedEventArgs e)
{
  ListBoxItem lbi = (ListBoxItem)
      (lb.ItemContainerGenerator.ContainerFromIndex(0));
  Item.Content = "The contents of the item at index 0 are: " +
      (lbi.Content.ToString()) + ".";
}

Для получения дополнительной помощи https://docs.microsoft.com/en-us/dotnet/framework/wpf/controls/how-to-get-a-listboxitem

...