Sam mechanizm jest bardzo prosty:
1. Użytkownik chwyta dane które chce przenieść
2. Razem w wciśniętym lewym przyciskiem myszy przesuwa kursor myszy w miejsce gdzie chce je umieścić. W zależności od możliwości wstawienia danych - kursor przyjmuje odpowiednią ikonkę sygnalizującą możliwość lub jej brak.
3. Użytkownik zwalnia lewy przycisk myszy a obiekt który otrzymał dane decyduje co z nimi zrobić.
Dla niektórych kontrolek wspomniana funkcjonalność jest już wbudowana (np. TextBox) dla innych sami musimy zatroszczyć się o obsługę odpowiednich zdarzeń:
Dla źródła
Wychwytujemy naciśnięcie myszki (zdarzenie MouseDown):
private void label1_MouseDown(object sender, MouseButtonEventArgs e)
{
Label l = sender as Label;
if (l != null)
{
DragDrop.DoDragDrop(l, l.Content, DragDropEffects.Copy);
}
}
Dla kontrolki docelowej:
Ustawiamy właściwość AllowDrop na True.
Obsługujemy zdarzenie Drop:
private void listBox1_Drop(object sender, DragEventArgs e)
{
ListBox lb = sender as ListBox;
if (lb != null)
{
lb.Items.Add(e.Data.GetData(DataFormats.Text));
}
}
Można także sprawdzić jakie dane są przeciągane i w zależności od nich pozwolić lub nie na operację:
private void listBox1_DragEnter(object sender, DragEventArgs e)
{
if (e.Data.GetDataPresent(DataFormats.Text))
{
e.Effects = DragDropEffects.Copy;
}
else
{
e.Effects = DragDropEffects.None;
}
}
Tyle jeżeli chodzi o Drag & Drop w WPFie.
Lepiej opisane zostało na tej stronie:
OdpowiedzUsuńhttp://www.poradnik-informatyka.com/2013/04/30/c-przeciaganie-pliku-do-okna-programu-drag-and-drop/
Tu jest lepiej bo strona istnieje
OdpowiedzUsuń