Невозможно изменить порядок элементов в 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 класс и пробую это оттуда. Вот что я узнал до сих пор,

  1. WinRT инструментарий WrapPanel наследуется Panel учебный класс
  2. WrapPanel от других библиотек, таких как UWPCommunityToolkit, также наследует Panel, поэтому я считаю, что все Dynamic Wrapping должны наследовать Panel учебный класс.
  3. Panel В классе нет кода для обнаружения события перетаскивания элемента (либо это, либо я перетаскиваю не ту вещь)
  4. ItemsWrapPanel это класс печати, делающий невозможным для меня наследование, и это относится к любому интерфейсу, который он также наследует

И на этом я заключил то, что я обнаружил до сих пор, и буду продолжать обновлять это, если я что-то нашел.

Авторы обращаются к Xavier Xie - MSFT за указание правильного направления для этого.

1 ответ

WrapPanel из WinRTXamlToolkit не имеет функции переупорядочения. Вам нужно будет выполнить переупорядочение вручную, прослушивая события перетаскивания.

Если вы хотите реализовать это самостоятельно, вы можете прочитать блог " Пошаговое руководство Джерри Никсона : переупорядочение элементов в GridView с помощью перетаскивания", чтобы понять основной принцип переупорядочения GridView.

В качестве простого обходного пути вы можете использовать ItemsStackPanel Контроль как его ItemsPanel, он реализовал функцию переупорядочения. Этот элемент управления также не будет иметь космического элемента, когда вы прячете один элемент.

Другие вопросы по тегам