poniedziałek, 19 lipca 2010

Drag and Drop WPF

Jeżeli chodzi o sposób działania i obsługi to nie zmienił się zbytnio od czasów WindowsForms (opisywałem go tutaj).

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;
            }
        }
Jeżeli dane które kopiujemy nie da się skonwertować na tekst, przenoszenie zostanie zablokowane.

Tyle jeżeli chodzi o Drag & Drop w WPFie.

1 komentarz:

  1. Lepiej opisane zostało na tej stronie:
    http://www.poradnik-informatyka.com/2013/04/30/c-przeciaganie-pliku-do-okna-programu-drag-and-drop/

    OdpowiedzUsuń