2017-02-07 26 views
1

(StackLayout型の)セルのグループがあり、それらはすべてWrapLayoutにあります。 Drag & Drop ListViewのように、並べ替え可能にする方法を見つけることができないようです。ここでXamarin.Forms並べ替え可能WrapLayout

はWrapLayoutです:

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

すべてのヘルプ

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, 
}; 

そしてここでは、1個のセルがありますこれを可能にすることに感謝します。

答えて

1

あなたが言っているWrapLayoutは私が信じている開発者のデモの1つとして作成されたカスタムレイアウトです。ドラッグアンドドロップ機能を使用するには、手動で手動で実装する必要があります。

個人的に私は、セルのタップイベントにイベントハンドラをアタッチします:

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 /セルが配置された場所を計算します。カスタムレンダラーは、私が考える最高の賭けです。 – nkorai

+0

間違いなく、非遅延実装を使用する必要があります。 :P – ctkrocks

関連する問題