Я делаю приложение UWP, которое сейчас должно быть на xbox, и, возможно, в будущем я выпущу его на ПК и других платформах. Я знаю, что на ПК и на мобильных устройствах мы можем включить эту функцию с помощью следующих двух свойств: GridView
или ListView
.
CanReorderItems=True
CanDrop=True
Но согласно Microsoft Docs, функция перетаскивания - это недоступно или не поддерживается на Xbox.
Итак, каковы еще варианты для достижения этой функции переупорядочивания на xbox GridView
?
ОБНОВЛЕНИЕ 1
Итак, вот мой бэкэнд-код для gridview. режим выбора является одиночным, но я не использую событие selectionchanged, потому что это просто создает много путаницы, и пока просто предположим, что нам всегда нужно менять элементы местами. Я установлю логическое значение позже, когда обмен будет работать идеально.
private void SamplePickerGridView_ChoosingItemContainer(Windows.UI.Xaml.Controls.ListViewBase sender, ChoosingItemContainerEventArgs args)
{
if (args.ItemContainer != null)
{
return;
}
GridViewItem container = (GridViewItem)args.ItemContainer ?? new GridViewItem();
//should be xbox actually after pc testing
if (DeviceTypeHelper.GetDeviceFormFactorType() == DeviceFormFactorType.Desktop)
{
container.GotFocus += Container_GotFocus;
container.LostFocus += Container_LostFocus;
//container.KeyDown += Container_KeyDown;
}
args.ItemContainer = container;
}
private TVShow GotItem, LostItem;
private void Container_LostFocus(object sender, RoutedEventArgs e)
{
LostItem = OnNowAllGridView.ItemFromContainer(e.OriginalSource as GridViewItem) as TVShow;
GotItem = null;
}
private void Container_GotFocus(object sender, RoutedEventArgs e)
{
GotItem = OnNowAllGridView.ItemFromContainer(e.OriginalSource as GridViewItem) as TVShow;
if (GotItem != null && LostItem != null)
{
var focusedItem = GotItem;
var lostitem = LostItem;
var index1 = ViewModel.Source.IndexOf(focusedItem);
var index2 = ViewModel.Source.IndexOf(lostitem);
ViewModel.Source.Move(index1, index2);
}
LostItem = null;
}
Вы можете попробовать код с Adaptivegridview или просто с обычным gridview uwp, если он работает с этим, он также должен работать с Adaptivegridview.
Элементы Current Bheaviour меняются местами, но фокус остается в том же индексе.
Ожидается, фокус также должен перемещаться вместе с элементом.