Xamarin.Forms Reorderable WrapLayout
У меня есть группа ячеек (типа StackLayout), и все они в WrapLayout. Я не могу понять, как сделать его переупорядочиваемым, подобно Drag & Drop ListView.
Вот WrapLayout:
WrapLayout layout = new WrapLayout
{
Spacing = 5,
Orientation = StackOrientation.Horizontal,
Padding = new Thickness(5, Device.OnPlatform(20, 5, 5), 5, 5),
HorizontalOptions = LayoutOptions.FillAndExpand,
VerticalOptions = LayoutOptions.FillAndExpand,
};
И вот одна клетка:
// Configure cell
var cell = new StackLayout
{
WidthRequest = Device.Idiom == TargetIdiom.Phone ? 60 : 140,
HeightRequest = Device.Idiom == TargetIdiom.Phone ? 60 : 50,
BackgroundColor = Color.FromRgb(60, 56, 72),
Children = {
new Label {
Text = Device.Idiom == TargetIdiom.Phone ? book.Contains("1") || book.Contains("2") || book.Contains("3") ? book.Substring(0,4).Replace(" ", "") : book.Substring(0,2) : book,
FontSize = 18,
TextColor = Color.White,
LineBreakMode = LineBreakMode.TailTruncation,
VerticalOptions = LayoutOptions.FillAndExpand,
HorizontalOptions = LayoutOptions.FillAndExpand,
VerticalTextAlignment = TextAlignment.Center,
HorizontalTextAlignment = TextAlignment.Center
}
}
};
layout.Children.Add(cell);
А вот как выглядит приложение на данный момент:
Любая помощь в создании этого возможна.
1 ответ
Ну, WrapLayout, на который вы ссылаетесь, - это пользовательский макет, который был создан как одна из тех демонстраций разработчиками, которым я верю. Чтобы иметь функцию перетаскивания, вам нужно будет реализовать ее вручную.
Лично я бы прикрепил обработчик событий к событию Tapped ячейки:
var cell = new StackLayout
{
Tapped += Cell_Tapped;
WidthRequest = Device.Idiom == TargetIdiom.Phone ? 60 : 140,
HeightRequest = Device.Idiom == TargetIdiom.Phone ? 60 : 50,
BackgroundColor = Color.FromRgb(60, 56, 72),
Children = {
new Label {
Text = Device.Idiom == TargetIdiom.Phone ? book.Contains("1") || book.Contains("2") || book.Contains("3") ? book.Substring(0,4).Replace(" ", "") : book.Substring(0,2) : book,
FontSize = 18,
TextColor = Color.White,
LineBreakMode = LineBreakMode.TailTruncation,
VerticalOptions = LayoutOptions.FillAndExpand,
HorizontalOptions = LayoutOptions.FillAndExpand,
VerticalTextAlignment = TextAlignment.Center,
HorizontalTextAlignment = TextAlignment.Center
}
}
};
layout.Children.Add(cell);
а затем создайте обработчик событий:
void Cell_Tapped(object sender, EventArgs e)
{
// Stuff you want to do with that cell
// Make the current selected cell invisible, attach it to a boxview that is being moved by the tap event
}
Это, однако, будет работать только для касания, а не для реальной реализации перетаскивания, и Xamarin.Forms в настоящее время не предоставляет вам доступ к событиям касания. Вы можете написать пользовательские средства визуализации для ячеек на iOS и Android, которые позволят вам получать доступ к событиям типа TouchesBegan и TouchesEnded на обеих платформах.
Эта ссылка на Xamarin дает пошаговые инструкции по интеграции сенсорных приложений на iOS и Android.
Я надеюсь, что это помогает, я уверен, что есть разные реализации этого.