2017-11-23 2 views
0

사용되며 정렬 응용 프로그램을 만드는 오전 어떤 경우에는 내가있는 gridview 항목을 숨길 내가이 사람과 같은 오류가 발생하는 경우의 GridView의 항목을 재 배열 할 수 없습니다 : 그래서WrapPanel이 UWP

Hide GridViewItem and reposition items in GridView

수정 프로그램을 구현 및 작동하지만 갑자기 내 GridView 내에서 항목을 드래그하고 재정렬 할 수 없습니다. 내 gridView.ItemsPanel에 WrapPanel을 구현 한 후에 만 ​​표시 할 수있는 항목에서 제거하고 즉시 다시 정렬 할 수 있습니다. . 내가 끌어 WrapPanel와의 GridView의 항목 순서를 변경하려고 할 때의

<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> 

이미지 :

여기 내 XML 코드의 Unable to drop to reorder for some reason

내가에 명시된 무언가를 놓치고 WinRTXamlToolkit, 또는이 문제를 해결할 방법이 없습니다.

UPDATE 2017 11월 27일

그래서 그래서 WrapPanel 클래스를 상속하고 거기에서 그것을 시도하여 winRT 툴킷에 대한 기능의 순서를 드래그 앤 드롭을 구현하려고 @ Xavier Xie - MSFT에 의해 제안 일부 땜질 후. 는 여기에 내가 지금까지 UWPCommunityToolkit 도 따라서 모든 동적 포장이 Panel 클래스를 상속해야한다고 나에게 일을 만드는 패널을 상속 같은 다른 라이브러리에서 Panel 클래스

  • WrapPanel을 상속 WrapPanel

    1. winRT 툴킷을 발견 한거야.
    2. Panel 클래스는 (그 중 하나 또는 내가 잘못된 일을 드래그하고) 항목 끌기 이벤트를 검출 코드가없는
    3. ItemsWrapPanel이 불가능 나를 상속 할 만들기 인감 클래스입니다 그리고 그것은 상속 어떤 인터페이스에 간다 또한

    그리고 이것은 내가 지금까지 발견 한 바를 결론 지었고, 내가 발견 한 것을 계속 업데이트 할 것이다.

    크레딧은 저를 올바른 방향으로 가리키며 @ Xavier Xie - MSFT으로갑니다.

  • 답변

    1

    WinRTXamlToolkit의 WrapPanel은 재정렬 기능을 구현하지 않았습니다. 드래그 & 드롭 이벤트를 수신하여 순서 재 지정을 수동으로 구현해야합니다.

    직접 구현하려는 경우 Jerry Nixon의 블로그 Walkthrough: Reordering items in a GridView with Drag and Drop을 읽고 GridView의 재정렬 기본 원칙을 이해할 수 있습니다.

    쉬운 해결 방법으로 ItemsStackPanel 컨트롤을 ItemsPanel로 사용할 수 있으며 재정렬 기능이 구현되었습니다. 이 컨트롤은 하나의 항목을 숨길 때 거기에 공간 항목을 갖지 않습니다.

    +0

    와우, 작동하지만 고맙습니다. 한 가지 문제가 있습니다. 'ItemsStackPanel'을 추가 한 후에 gridview 항목이 더 이상 포장되지 않습니다. 아마도 ItemsStackPanel이 구현하지 않았기 때문일 수 있습니다. 기본 'ItemsWrapGrid'와 같은 항목을 래핑 할 함수. 그리고 동적 인 포장은 필요 없으며 정적 폭과 높이를 가지고 있습니다. 어떻게 그렇게 할 수 있습니까? – Annonymous177

    +0

    @ Annonymous177 네 말이 맞아. 'ItemsStackPanel'은 "wrap"함수를 구현하지 않았습니다. 사용자 정의 패널을 만들 수도 있지만 이렇게하면 "재배치"및 "둘러싸 기"기능을 모두 구현해야합니다. 그래서, 위 응답에서 말한 것처럼 WinRTXamlToolkit의 WrapPanel에 대한 "레코딩"을 구현하려고 할 수 있다고 제안했습니다. –

    +0

    글쎄, 필자는 궁금하다. 궁금한 점은, 맞춤 패널을 만드는 방법에 대해 어떻게 가르쳐야하는지에 대한 지침을 찾을 수 없다는 점이다. – Annonymous177