Как заменить текст с помощью перетаскивания из списка в текстовое поле в WPF? - PullRequest
0 голосов
/ 30 апреля 2018

Я новичок в WPF и C #. У меня есть код для перетаскивания строки из списка в текстовое поле, однако я бы хотел, чтобы при перетаскивании текст перезаписывался / заменялся в настоящее время в текстовом поле. Прямо сейчас текст вставляется в строку текстового поля в месте мыши, где происходит падение. Вот это WPF и обработчики событий, которые у меня есть. Заранее спасибо.

<ListBox  Name="listbox1" HorizontalAlignment="Left" Height="115" Margin="100,75,0,0" 
                  VerticalAlignment="Top" Width="150" PreviewMouseDown="listbox1_MouseDown">
            <ListBoxItem Content="Coffie"></ListBoxItem>
            <ListBoxItem Content="Tea"></ListBoxItem>
            <ListBoxItem Content="Orange Juice"></ListBoxItem>
            <ListBoxItem Content="Milk"></ListBoxItem>
            <ListBoxItem Content="Iced Tea"></ListBoxItem>
            <ListBoxItem Content="Mango Shake"></ListBoxItem>
        </ListBox>
        <TextBox Name="textbox1" HorizontalAlignment="Left" Height="23" Margin="351,75,0,0" TextWrapping="Wrap"Text="" VerticalAlignment="Top" Width="120" SpellCheck.IsEnabled="True" Cursor="IBeam"
                 AcceptsReturn="True" AllowDrop="True" PreviewDragOver="textbox1_PreviewDragOver"
                 DragEnter="textbox1_DragEnter" Drop="textbox1_Drop"/>



private void listbox1_MouseDown(object sender, MouseButtonEventArgs e)
        {
            if (listbox1.SelectedItems.Count > 0)
            {
                ListBoxItem mySelectedItem = listbox1.SelectedItem as ListBoxItem;
                if (mySelectedItem != null)
                {
                    DragDrop.DoDragDrop(listbox1, mySelectedItem.Content.ToString(), DragDropEffects.Copy);
                }
            }
        }
        private void textbox1_PreviewDragOver(object sender, DragEventArgs e)
        {
            e.Handled = true;
        }

        private void textbox1_DragEnter(object sender, DragEventArgs e)
        {
            textbox1.Clear();
            e.Effects = DragDropEffects.Copy;
        }
        private void textbox1_Drop(object sender, DragEventArgs e)
        {
            string tstring;
            tstring = e.Data.GetData(DataFormats.StringFormat).ToString();
            textbox1.Text= tstring;
        }

1 Ответ

0 голосов
/ 30 апреля 2018

Попробуйте обработать событие Preview Drop вместо Drop:

private void textbox1_PreviewDrop(object sender, DragEventArgs e)
{
    e.Handled = true;
    string tstring;
    tstring = e.Data.GetData(DataFormats.StringFormat).ToString();
    textbox1.Text = tstring;
}
...