2017-02-07 4 views
1

셀 유형이 StackLayout이고 모두 WrapLayout입니다. Drag & Drop ListView과 비슷하게 순서를 바꿀 수있는 방법을 알아낼 수 없습니다. 여기 Xamarin.Forms 순서 재 지정 가능 WrapLayout

는 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); 

그리고 여기에 응용 프로그램이 실제로 같은 지금 같은 모습입니다 : The App

어떤 도움 이것을 가능하게하는 것은 인정됩니다.

답변

1

당신이 말하는 WrapLayout은 내가 믿는 개발자가 만든 데모 중 하나 인 사용자 정의 레이아웃입니다. 끌어서 놓기 기능을 사용하려면 직접 수동으로 구현해야합니다.

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는 현재 터치 이벤트에 대한 액세스를 제공하지 않습니다. 두 플랫폼에서 TouchesBegan 및 TouchesEnded 유형 이벤트에 액세스 할 수있게 해주는 iOS 및 Android의 셀에 대한 맞춤 렌더러를 작성할 수 있습니다.

Xamarin link은 iOS 및 Android에서 터치를 통합하는 데 대한 연습을 제공합니다.

이 정보가 도움이되기를 바랍니다. 다른 구현 방법이있을 것입니다.

+0

그래서 어떻게 손가락으로 상자를 움직일 수 있습니까? – ctkrocks

+1

게으른 구현 : 화면의 다른 부분을 다시 탭하면 선택한 StackLayout/셀을 이동하고 재정리하고 새로 고쳐야하는 지점으로 등록됩니다. 비 게으른 구현 : 각 플랫폼에서 맞춤 렌더러를 사용하십시오. 이렇게하면 터치 관련 이벤트를 사용하여 이동의 델타를 가로 채고 터치 이벤트가 끝나면 손가락을 들어 올리면 좌표를 사용하여 StackLayout/셀이 배치 된 위치를 계산할 수 있습니다. 커스텀 렌더러 (Custom Renderer)가 최선이라고 생각합니다. – nkorai

+0

좋아요. 확실히 비 게으른 구현을 사용해야합니다. :피 – ctkrocks