Невозможно изменить порядок элементов в GridView, когда используется WrapPanel UWP
И я создаю приложение сортировки, и в некоторых случаях я скрываю элемент gridview, и я сталкиваюсь с той же ошибкой, что и этот человек:
Скрыть GridViewItem и изменить положение элементов в GridView
Поэтому я реализовал исправление, и оно сработало, но неожиданно было запрещено перетаскивать и изменять порядок элементов в моем GridView. И насколько я могу судить, оно появилось только после того, как я внедрил WrapPanel в свой gridView.ItemsPanel
и удалив его, я сразу же могу изменить порядок снова.
и вот мой код XML:
<Page
x:Class="ImageSorting.MainPage"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:ImageSorting"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:data ="using:ImageSorting.Models"
xmlns:toolkit="using:WinRTXamlToolkit.Controls"
mc:Ignorable="d">
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<Grid HorizontalAlignment="Stretch" Height="57" VerticalAlignment="Top">
<Border BorderBrush="Black" BorderThickness="0 0 0 1" HorizontalAlignment="Stretch" Height="57" VerticalAlignment="Top"/>
<Button x:Name="SelectFolder" Content="Select Folder" HorizontalAlignment="Right" VerticalAlignment="Top" Margin="0,11,10,0" Background="#80a4ec" Click="SelectFolder_Click"/>
<Button x:Name="AddFolder" Content="Add Folder" HorizontalAlignment="Right" VerticalAlignment="Top" Margin="0,11,125,0" Background="#84eeb1" Click="AddFolder_Click" />
<Button x:Name="Save" Content="Save" HorizontalAlignment="Right" VerticalAlignment="Top" Margin="0,11,230,0" Background="#ece880" Click="Save_Click"/>
<ComboBox x:Name="ImageFolder" HorizontalAlignment="Left" VerticalAlignment="Top" Margin=" 20 11 0 0" SelectedIndex="0" SelectionChanged="ImageFolder_SelectionChanged">
<ComboBoxItem>All Images</ComboBoxItem>
</ComboBox>
</Grid>
<GridView x:Name="ImageGrid" HorizontalAlignment="Stretch" Margin="10,60,10,0" VerticalAlignment="Stretch" ItemsSource="{x:Bind ImgList, Mode=OneWay}" CanDragItems="True" AllowDrop="True" CanReorderItems="True" SelectionMode="Extended">
<GridView.ItemTemplate>
<DataTemplate x:DataType="data:Images">
<StackPanel>
<Image x:Name="Image" Width="206" Height="158" Source="{x:Bind imageData}" DoubleTapped="Image_DoubleTapped"/>
<StackPanel Orientation="Horizontal">
<TextBlock HorizontalAlignment="Left" FontSize="15" Text="{x:Bind imageNumber}" Margin="10 5 0 0"/>
<TextBlock HorizontalAlignment="Left" TextAlignment="Left" Width="100" FontSize="15" Text="{x:Bind altChar}" Margin="10 5 0 0"/>
<CheckBox x:Name="altNumber" HorizontalAlignment="Right" MinWidth="0" Margin="35 0 0 0" Click="altNumber_Click"/>
</StackPanel>
</StackPanel>
</DataTemplate>
</GridView.ItemTemplate>
<GridView.ItemsPanel>
<ItemsPanelTemplate>
<toolkit:WrapPanel Orientation="Horizontal" AllowDrop="True">
</toolkit:WrapPanel>
</ItemsPanelTemplate>
</GridView.ItemsPanel>
</GridView>
<Grid x:Name="ConfirmGrid" HorizontalAlignment="Stretch" Height="50" VerticalAlignment="Bottom" Background="White" Visibility="Collapsed">
<Border BorderBrush="Black" BorderThickness="0 1 0 0" HorizontalAlignment="Stretch" Height="57" VerticalAlignment="Top" />
<Button x:Name="FolderConfirm" Content="Confirm" HorizontalAlignment="Right" VerticalAlignment="Top" Margin="0,10,10,0" RenderTransformOrigin="-0.128,7.104" Click="FolderConfirm_Click" />
</Grid>
</Grid>
Изображение, когда я пытаюсь перетащить и изменить порядок элементов GridView с помощью WrapPanel:
Я что-то упустил, что указано в WinRTXamlToolkit, или нет пути к решению этой проблемы.
ОБНОВЛЕНИЕ 2017 Ноя 27
Итак, после некоторой обработки, как предложено Xavier Xie - MSFT, попробуйте реализовать функцию перетаскивания и изменения порядка для инструментария winRT, унаследовав WrapPanel
класс и пробую это оттуда. Вот что я узнал до сих пор,
- WinRT инструментарий
WrapPanel
наследуетсяPanel
учебный класс WrapPanel
от других библиотек, таких как UWPCommunityToolkit, также наследует Panel, поэтому я считаю, что все Dynamic Wrapping должны наследоватьPanel
учебный класс.Panel
В классе нет кода для обнаружения события перетаскивания элемента (либо это, либо я перетаскиваю не ту вещь)ItemsWrapPanel
это класс печати, делающий невозможным для меня наследование, и это относится к любому интерфейсу, который он также наследует
И на этом я заключил то, что я обнаружил до сих пор, и буду продолжать обновлять это, если я что-то нашел.
Авторы обращаются к Xavier Xie - MSFT за указание правильного направления для этого.
1 ответ
WrapPanel из WinRTXamlToolkit не имеет функции переупорядочения. Вам нужно будет выполнить переупорядочение вручную, прослушивая события перетаскивания.
Если вы хотите реализовать это самостоятельно, вы можете прочитать блог " Пошаговое руководство Джерри Никсона : переупорядочение элементов в GridView с помощью перетаскивания", чтобы понять основной принцип переупорядочения GridView.
В качестве простого обходного пути вы можете использовать ItemsStackPanel
Контроль как его ItemsPanel, он реализовал функцию переупорядочения. Этот элемент управления также не будет иметь космического элемента, когда вы прячете один элемент.