private void Mapa_Drop(object sender, DragEventArgs e) { if (e.Data.GetDataPresent("ugrozeniDrag")) { Vrsta vrsta = e.Data.GetData("ugrozeniDrag") as Vrsta; //Console.WriteLine("Dropovan " + vrsta.Ime); //Provera //lok.Point = e.GetPosition(Mapa); double newLeft = e.GetPosition(Mapa).X; // newLeft inside canvas right-border? if (newLeft > Mapa.Margin.Left + Mapa.ActualWidth - 30) { newLeft = Mapa.Margin.Left + Mapa.ActualWidth - 30; //30 je sirina slike } // newLeft inside canvas left-border? else if (newLeft < Mapa.Margin.Left) { newLeft = Mapa.Margin.Left; } double newTop = e.GetPosition(Mapa).Y; // newTop inside canvas bottom-border? if (newTop > Mapa.Margin.Top + Mapa.ActualHeight - 30) { newTop = Mapa.Margin.Top + Mapa.ActualHeight - 30; //30 je visina slike } // newTop inside canvas top-border? else if (newTop < Mapa.Margin.Top) { newTop = Mapa.Margin.Top; } vrsta.Point = new Point(newLeft, newTop); //provera za presek sa ostalim ikonicama na mapi foreach (Vrsta v in NaMapi) { //da li se novi sece po x osi if (Math.Abs(vrsta.Point.X - v.Point.X) < 30) //ako su u preseku { if (Mapa.ActualWidth - vrsta.Point.X < Mapa.ActualWidth - v.Point.X) //ako je prevlaceni blizi levo { vrsta.Point = new Point(newLeft - 40, newTop); } else if (Mapa.ActualWidth - vrsta.Point.X > Mapa.ActualWidth - v.Point.X) //ako je prevlaceni blizi desno { vrsta.Point = new Point(newLeft + 40, newTop); } } //da li se novi sece po y osi if (Math.Abs(vrsta.Point.Y - v.Point.Y) < 30) //ako su u preseku { if (Mapa.ActualHeight - vrsta.Point.Y < Mapa.ActualHeight - v.Point.Y) //ako je prevlaceni blizi gore { vrsta.Point = new Point(vrsta.Point.X, newTop - 40); } else if (Mapa.ActualHeight - vrsta.Point.Y > Mapa.ActualHeight - v.Point.Y) //ako je prevlaceni blizi dole { vrsta.Point = new Point(vrsta.Point.X, newTop + 40); } } } if (NaMapi.Contains(vrsta) == false) { NaMapi.Add(vrsta); } Console.WriteLine(NaMapi.Count); isDragging = false; } }