Xamarin.Forms Posouvání CollectionView
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:
HorizontalDeltatypdoublepř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.VerticalDeltatypdoublepř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ů.HorizontalOffsettypdoubledefinuje hodnotu, o kterou je seznam vodorovně odsazen od svého původu.VerticalOffsettypdoubledefinuje hodnotu, o kterou je seznam svisle posunut od svého původu.FirstVisibleItemIndextypintje index první položky, která je viditelná v seznamu.CenterItemIndextypintje 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í:
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í:
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í:
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í:
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:
KeepItemsInViewPři přidání nových položek zachová první položku v seznamu.KeepScrollOffsetzajistí, že se při přidání nových položek zachová aktuální poloha posunutí.KeepLastItemInViewNastaví 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:
Defaultoznačuje výchozí chování posuvníku pro platformu a je výchozí hodnotou proHorizontalScrollBarVisibilityVerticalScrollBarVisibilityvlastnosti a.Alwaysoznačuje, že se budou zobrazovat posuvníky, a to i v případě, že se obsah vejde do zobrazení.Neveroznač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:
- _ItemsLayout_SnapPointsType "data-LINKTYPE =" absolutní cesta ">
SnapPointsTypetypuSnapPointsTypeUrčuje chování přichycených bodů při posouvání. - Xamarin_Forms _ItemsLayout_SnapPointsAlignment "data-LINKTYPE =" absolutní cesta ">
SnapPointsAlignmenttypuSnapPointsAlignmentUrčuje, jak jsou body přichyceny s položkami.
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:
Noneoznačuje, že posouvání nepřichytá položky.Mandatoryoznač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.MandatorySingleoznačuje stejné chování jakoMandatory, 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:
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í:
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í:
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í:
Stažení ukázky






