
Мне нравится реализовывать перетаскивание. Итак, идея состоит в том, что пользователь может перетащить кнопку (слово) и опустить StackLayout внизу.
На GitHub я создал эту ветку, чтобы показать свою реализацию.
На GitHub я создал эту ветку, чтобы показать свою реализацию.
На GitHub я создал эту ветку, чтобы показать свою реализацию.
p>
Каждая кнопка создается с помощью этой функции
Код: Выделить всё
private Button CreateDraggableButton(string word, bool isSelected = false)
{
var button = new Button
{
Text = word,
FontSize = TextSize,
FontFamily = FontFamily,
BackgroundColor = ButtonColor
};
var dragGesture = new DragGestureRecognizer();
dragGesture.DragStarting += (s, e) => OnDragStarting(s, e, word);
button.GestureRecognizers.Add(dragGesture);
var dropGesture = new DropGestureRecognizer();
dropGesture.Drop += (s, e) => OnDrop(s, e, word);
button.GestureRecognizers.Add(dropGesture);
var tapGesture = new TapGestureRecognizer();
if (isSelected)
tapGesture.Tapped += (s, e) => OnSelectedWordClicked(s, e);
else
tapGesture.Tapped += (s, e) => OnAvailableWordClicked(s, e);
button.GestureRecognizers.Add(tapGesture);
return button;
}
Код: Выделить всё
private void OnDragStarting(object sender, DragStartingEventArgs e, string word)
{
e.Data.Properties.Add("Word", word);
e.Data.Properties.Add("Source", sender);
}
private void OnDrop(object sender, DropEventArgs e, string word)
{
if (e.Data.Properties.ContainsKey("Word"))
{
var draggedWord = e.Data.Properties["Word"].ToString();
var sourceButton = e.Data.Properties["Source"] as Button;
if (selectedWords.Contains(draggedWord))
{
selectedWords.Remove(draggedWord);
var dropIndex = selectedWords.IndexOf(word);
selectedWords.Insert(dropIndex, draggedWord);
}
else
{
AvailableWords.Remove(draggedWord);
selectedWords.Add(draggedWord);
}
UpdateWordButtons();
}
}
Подробнее здесь: https://stackoverflow.com/questions/790 ... oesnt-fire
Мобильная версия