Xamarin.Forms Posouvání CollectionView

Ukázka stažení Stažení ukázky

CollectionView definuje dvě ScrollTo metody, které přesouvají položky do zobrazení. Jedno z přetížení posouvá položku v zadaném indexu do zobrazení, zatímco druhá posune zadanou položku do zobrazení. Obě přetížení mají další argumenty, které lze zadat k označení skupiny, do které položka patří, přesného umístění položky po posunu, a zda se má animovat posuvník.

CollectionView definuje ScrollToRequested událost, která je aktivována, když ScrollTo je vyvolána jedna z metod. ScrollToRequestedEventArgsObjekt, který provází událost, ScrollToRequested má mnoho vlastností, včetně IsAnimated ,, IndexItem a ScrollToPosition . Tyto vlastnosti jsou nastaveny z argumentů zadaných v ScrollTo volání metody.

Kromě toho CollectionView definuje Scrolled událost, která je aktivována pro indikaci, že došlo k posouvání. ItemsViewScrolledEventArgsObjekt, který provází událost, Scrolled má mnoho vlastností. Další informace najdete v tématu zjištění posouvání.

CollectionView také definuje ItemsUpdatingScrollMode vlastnost, která představuje chování posouvání CollectionView při přidání nových položek. Další informace o této vlastnosti naleznete v tématu řízení pozice posunutí při přidání nových položek.

Když uživatel potáhne k zahájení posouvání, může být koncová pozice posuvníku řízena tak, aby se položky zobrazovaly úplně. Tato funkce se označuje jako přichycení, protože se položky přichyceny k poloze při posouvání. Další informace najdete v tématu body přichycení.

CollectionView data lze také přírůstkově načítat, jakmile se uživatel posune. Další informace najdete v tématu přírůstkové načítání dat.

Detekovat posouvání

CollectionView definuje Scrolled událost, která je aktivována k označení, že došlo k posouvání. ItemsViewScrolledEventArgsTřída, která představuje objekt doprovázící Scrolled událost, definuje následující vlastnosti:

  • HorizontalDeltatyp double představuje změnu v množství vodorovného posouvání. Jedná se o zápornou hodnotu při posouvání doleva a kladná hodnota při posouvání doprava.
  • VerticalDeltatyp double představuje změnu v množství svislého posouvání. Toto je záporná hodnota při posouvání nahoru a kladná hodnota při posouvání směrem dolů.
  • HorizontalOffsettyp double definuje hodnotu, o kterou je seznam vodorovně odsazen od svého původu.
  • VerticalOffsettyp double definuje hodnotu, o kterou je seznam svisle posunut od svého původu.
  • FirstVisibleItemIndextyp int je index první položky, která je viditelná v seznamu.
  • CenterItemIndextyp int je index položky centra, která je viditelná v seznamu.
  • LastVisibleItemIndexintje typ indexu poslední položky, která je v seznamu viditelná.

Následující příklad XAML ukazuje CollectionView , který nastaví obslužnou rutinu události pro Scrolled událost:

<CollectionView Scrolled="OnCollectionViewScrolled">
    ...
</CollectionView>

Ekvivalentní kód jazyka C#:

CollectionView collectionView = new CollectionView();
collectionView.Scrolled += OnCollectionViewScrolled;

V tomto příkladu kódu OnCollectionViewScrolled se obslužná rutina události spustí, když se Scrolled událost aktivuje:

void OnCollectionViewScrolled(object sender, ItemsViewScrolledEventArgs e)
{
    // Custom logic
}

Důležité

ScrolledUdálost se aktivuje pro uživatele iniciované posuvníky a pro programová posouvání.

Posune položku v indexu do zobrazení.

První ScrollTo přetížení metody posouvá položku v zadaném indexu do zobrazení. V případě CollectionView objektu s názvem collectionView Následující příklad ukazuje, jak přejít na položku v indexu 12 do zobrazení:

collectionView.ScrollTo(12);

Alternativně lze položku v seskupených datech posunout do zobrazení zadáním indexů položek a skupin. Následující příklad ukazuje, jak přejít na třetí položku ve druhé skupině do zobrazení:

// Items and groups are indexed from zero.
collectionView.ScrollTo(2, 1);

Poznámka

ScrollToRequestedUdálost je aktivována při ScrollTo vyvolání metody.

Posunout položku do zobrazení

Druhé ScrollTo přetížení metody posouvá zadanou položku do zobrazení. CollectionViewZ objektu s názvem collectionView , následující příklad ukazuje, jak posunout položku proboscis opice do zobrazení:

MonkeysViewModel viewModel = BindingContext as MonkeysViewModel;
Monkey monkey = viewModel.Monkeys.FirstOrDefault(m => m.Name == "Proboscis Monkey");
collectionView.ScrollTo(monkey);

Alternativně lze položku v seskupených datech posunout do zobrazení zadáním položky a skupiny. Následující příklad ukazuje, jak posunout položku proboscis opice ve skupině Opices do zobrazení:

GroupedAnimalsViewModel viewModel = BindingContext as GroupedAnimalsViewModel;
AnimalGroup group = viewModel.Animals.FirstOrDefault(a => a.Name == "Monkeys");
Animal monkey = group.FirstOrDefault(m => m.Name == "Proboscis Monkey");
collectionView.ScrollTo(monkey, group);

Poznámka

ScrollToRequestedUdálost je aktivována při ScrollTo vyvolání metody.

Zakázat posunutí animace

Při posouvání položky do zobrazení se zobrazí animace pro posouvání. Tuto animaci však lze zakázat nastavením animate argumentu ScrollTo metody na false :

collectionView.ScrollTo(monkey, animate: false);

Pozice posunutí ovládacího prvku

Při posouvání položky na zobrazení může být zadána přesná pozice položky po posouvání s position argumentem ScrollTo metod. Tento argument přijímá ScrollToPosition člena výčtu.

MakeVisible

ScrollToPosition.MakeVisibleČlen indikuje, že by se měla položka posunout, dokud není zobrazená v zobrazení:

collectionView.ScrollTo(monkey, position: ScrollToPosition.MakeVisible);

Tento ukázkový kód má za následek minimální posouvání potřebné k přesunutí položky do zobrazení:

CollectionView svislého seznamu s ScrollToPosition. MakeVisible, v systémech iOS a Android

Poznámka

ScrollToPosition.MakeVisibleČlen je použit ve výchozím nastavení, pokud není position při volání metody zadán argument ScrollTo .

Spustit

ScrollToPosition.StartČlen indikuje, že by měla být položka posunuta na začátek zobrazení:

collectionView.ScrollTo(monkey, position: ScrollToPosition.Start);

Výsledkem tohoto ukázkového kódu je položka, která se posouvá na začátek zobrazení:

snímkůobrazovky CollectionView svislého seznamu s ScrollToPosition. Start, v systému iOS a Android

Střed

ScrollToPosition.CenterČlen indikuje, že by měla být položka posunuta do středu zobrazení:

collectionView.ScrollTo(monkey, position: ScrollToPosition.Center);

Výsledkem tohoto ukázkového kódu je položka, která se posouvá do středu zobrazení:

CollectionView svislého seznamu s ScrollToPosition. Center, ve vertikálním seznamu iOS a Android

End

ScrollToPosition.EndČlen indikuje, že by měla být položka posunuta na konec zobrazení:

collectionView.ScrollTo(monkey, position: ScrollToPosition.End);

Tento příklad kódu vede k posunutí položky na konec zobrazení:

CollectionView svislého seznamu s ScrollToPosition. end, ve vertikálním seznamu iOS a Android

Při přidání nových položek ovládat posunutí pozice

CollectionView definuje ItemsUpdatingScrollMode vlastnost, která je zajištěna vlastností BIND. Tato vlastnost získá nebo nastaví ItemsUpdatingScrollMode hodnotu výčtu, která představuje chování posouvání CollectionView při přidání nových položek. ItemsUpdatingScrollModeVýčet definuje následující členy:

  • KeepItemsInView Při přidání nových položek zachová první položku v seznamu.
  • KeepScrollOffset zajistí, že se při přidání nových položek zachová aktuální poloha posunutí.
  • KeepLastItemInView Nastaví posunutí posunu tak, aby se poslední položka v seznamu zobrazila při přidání nových položek.

Výchozí hodnota ItemsUpdatingScrollMode vlastnosti je KeepItemsInView . Proto když budou nové položky přidány do CollectionView první položky v seznamu, zůstanou zobrazeny. Chcete-li zajistit, aby se poslední položka v seznamu zobrazila při přidání nových položek, nastavte ItemsUpdatingScrollMode vlastnost na KeepLastItemInView :

<CollectionView ItemsUpdatingScrollMode="KeepLastItemInView">
    ...
</CollectionView>

Ekvivalentní kód jazyka C#:

CollectionView collectionView = new CollectionView
{
    ItemsUpdatingScrollMode = ItemsUpdatingScrollMode.KeepLastItemInView
};

Viditelnost posuvníku

CollectionView definuje HorizontalScrollBarVisibility a VerticalScrollBarVisibility vlastnosti, které jsou zajištěny vazbami vlastností. Tyto vlastnosti získají nebo nastavují ScrollBarVisibility hodnotu výčtu, která představuje, když je zobrazen vodorovný nebo svislý posuvník. ScrollBarVisibilityVýčet definuje následující členy:

  • Default označuje výchozí chování posuvníku pro platformu a je výchozí hodnotou pro HorizontalScrollBarVisibilityVerticalScrollBarVisibility vlastnosti a.
  • Always označuje, že se budou zobrazovat posuvníky, a to i v případě, že se obsah vejde do zobrazení.
  • Never označuje, že posuvníky nebudou viditelné, i když se obsah nevejde do zobrazení.

Body přichycení

Když uživatel potáhne k zahájení posouvání, může být koncová pozice posuvníku řízena tak, aby se položky zobrazovaly úplně. Tato funkce se označuje jako přichycení, protože položky přichycené k pozici při posouvání se zastaví a jsou ovládány pomocí následujících vlastností ItemsLayout třídy:

Tyto vlastnosti jsou zálohovány BindableProperty objekty, což znamená, že vlastnosti mohou být cílem datových vazeb.

Poznámka

Když dojde k přichycení, dojde ve směru, který produkuje nejmenší množství pohybu.

Typ bodů přichycení

Výčet SnapPointsType definuje následující členy:

  • None označuje, že posouvání nepřichytá položky.
  • Mandatory označuje, že obsah se vždy přichytá k nejbližšímu bodu přichycení k bodu, kde by se posouvání přirozeně zastavilo, a to podél směru setrvačnosti.
  • MandatorySingle označuje stejné chování jako Mandatory , ale posouvání po jedné položce.

Ve výchozím nastavení je vlastnost Xamarin_Forms _ItemsLayout_SnapPointsType" data-linktype="absolute-path">nastavená na , což zajišťuje, že posouvání nepřichytá položky, jak je znázorněno na následujících snímcích SnapPointsTypeSnapPointsType.None obrazovky:

bez bodů přichycení Snímek obrazovky se svislým seznamem CollectionView bez bodů přichycení v iOSu a AndroiduSvislý seznam zobrazení

Zarovnání bodů přichycení

Výčet SnapPointsAlignment definuje Start členy , a CenterEnd .

Důležité

Hodnota vlastnosti Xamarin_Forms _ItemsLayout_SnapPointsAlignment" data-linktype="absolute-path">se respektuje pouze v případě, že je vlastnost SnapPointsAlignment Xamarin_Forms SnapPointsAlignment _ItemsLayout_SnapPointsType" data-linktype="absolute-path">SnapPointsTypeMandatoryMandatorySingle nastavená na nebo .

Spustit

Člen SnapPointsAlignment.Start označuje, že body přichycení jsou zarovnané s počáteční hranou položek.

Ve výchozím nastavení je Xamarin_Forms _ItemsLayout_SnapPointsAlignment data-linktype="absolute-path">SnapPointsAlignment vlastnost nastavená na SnapPointsAlignment.Start . Pro úplnost však následující příklad XAML ukazuje, jak nastavit tohoto člena výčtu:

<CollectionView ItemsSource="{Binding Monkeys}">
    <CollectionView.ItemsLayout>
        <LinearItemsLayout Orientation="Vertical"
                           SnapPointsType="MandatorySingle"
                           SnapPointsAlignment="Start" />
    </CollectionView.ItemsLayout>
    ...
</CollectionView>

Ekvivalentní kód jazyka C# je:

CollectionView collectionView = new CollectionView
{
    ItemsLayout = new LinearItemsLayout(ItemsLayoutOrientation.Vertical)
    {
        SnapPointsType = SnapPointsType.MandatorySingle,
        SnapPointsAlignment = SnapPointsAlignment.Start
    },
    // ...
};

Když uživatel potažením prstem zahájí posouvání, zarovná se horní položka k horní části zobrazení:

s počátečními body přichycení Snímek obrazovky se svislým seznamem CollectionView s počátečními body přichycení v iOSu a AndroiduSvislý seznam zobrazení s počátečními

Střed

Člen SnapPointsAlignment.Center označuje, že body přichycení jsou zarovnané se středem položek. Následující příklad XAML ukazuje, jak nastavit tento člen výčtu:

<CollectionView ItemsSource="{Binding Monkeys}">
    <CollectionView.ItemsLayout>
        <LinearItemsLayout Orientation="Vertical"
                           SnapPointsType="MandatorySingle"
                           SnapPointsAlignment="Center" />
    </CollectionView.ItemsLayout>
    ...
</CollectionView>

Ekvivalentní kód jazyka C# je:

CollectionView collectionView = new CollectionView
{
    ItemsLayout = new LinearItemsLayout(ItemsLayoutOrientation.Vertical)
    {
        SnapPointsType = SnapPointsType.MandatorySingle,
        SnapPointsAlignment = SnapPointsAlignment.Center
    },
    // ...
};

Když uživatel potažením prstem zahájí posouvání, zarovná se horní položka na střed v horní části zobrazení:

s body přichycení ke středu Snímek obrazovky s svislým seznamem CollectionView se středem a body přichycení, v iOSu a AndroiduSvislý seznam svislými body

End

Člen SnapPointsAlignment.End označuje, že body přichycení jsou zarovnané s koncovým okrajem položek. Následující příklad XAML ukazuje, jak nastavit tento člen výčtu:

<CollectionView ItemsSource="{Binding Monkeys}">
    <CollectionView.ItemsLayout>
        <LinearItemsLayout Orientation="Vertical"
                           SnapPointsType="MandatorySingle"
                           SnapPointsAlignment="End" />
    </CollectionView.ItemsLayout>
    ...
</CollectionView>

Ekvivalentní kód jazyka C# je:

CollectionView collectionView = new CollectionView
{
    ItemsLayout = new LinearItemsLayout(ItemsLayoutOrientation.Vertical)
    {
        SnapPointsType = SnapPointsType.MandatorySingle,
        SnapPointsAlignment = SnapPointsAlignment.End
    },
    // ...
};

Když uživatel potažením prstem zahájí posouvání, spodní položka se zarovná do dolní části zobrazení:

s koncovými body přichycení Snímek obrazovky se svislým seznamem CollectionView s koncovými body přichycení v iOSu a AndroiduSvislý seznam s koncovými