Bagikan melalui


IScrollAnchorProvider Antarmuka

Definisi

Menentukan kontrak untuk kontrol pengguliran yang mendukung penjangkaran gulir.

public interface class IScrollAnchorProvider
/// [Windows.Foundation.Metadata.ContractVersion(Microsoft.UI.Xaml.WinUIContract, 65536)]
/// [Windows.Foundation.Metadata.Guid(2287858719, 62016, 23419, 167, 3, 191, 175, 57, 198, 162, 205)]
struct IScrollAnchorProvider
[Windows.Foundation.Metadata.ContractVersion(typeof(Microsoft.UI.Xaml.WinUIContract), 65536)]
[Windows.Foundation.Metadata.Guid(2287858719, 62016, 23419, 167, 3, 191, 175, 57, 198, 162, 205)]
public interface IScrollAnchorProvider
Public Interface IScrollAnchorProvider
Turunan
Atribut

Keterangan

Gulir Penahanan

Gulir penahanan adalah ketika kontrol gulir secara otomatis mengubah posisi viewport-nya untuk mencegah konten melompat dengan jelas. Lompatan disebabkan oleh perubahan tata letak konten. Penyedia jangkar gulir menerapkan pergeseran setelah mengamati perubahan posisi elemen jangkar dalam konten.

Ini adalah tanggung jawab dari menerapkan kontrol gulir untuk menentukan kebijakan apa yang akan digunakannya dalam memilih CurrentAnchor dari set kandidat terdaftar.

Perilaku yang Diharapkan

Ketika perubahan tata letak berdampak pada ukuran/posisi elemen jangkar, viewport harus secara otomatis bergeser untuk mempertahankan posisi sebelumnya dari elemen jangkar relatif terhadap viewport.

Gulir penahanan (yaitu pergeseran viewport otomatis) tidak berlaku setiap saat. Ini harus terjadi sebagai akibat dari elemen kandidat ditambahkan ke atau dihapus dari pohon atau berubah ukuran. Situasi lain yang dapat memicu tata letak, tetapi tidak selalu menyebabkan pergeseran viewport otomatis akan mencakup:

  • Pengguna yang menggeser konten
  • Pengembang secara terprogram mengubah tampilan
  • Menangani peristiwa BringIntoViewRequested

Elemen Jangkar

Kontrol penerapan harus memilih elemen jangkar dari set kandidat yang terdaftar sebelumnya dan menetapkannya sebagai CurrentAnchor-nya.

Elemen Jangkar Kandidat

Kumpulan elemen jangkar kandidat dapat berubah selama salah satu situasi yang dipanggil sebelumnya. Elemen terdaftar sebagai kandidat jangkar potensial dengan:

  1. mengatur properti UIElement.CanBeScrollAnchor mereka ke true, atau
  2. mendaftarkan elemen secara terprogram menggunakan metode RegisterAnchorCandidate .

Properti CanBeScrollAnchor dapat diatur kapan saja. Ketika diatur, kerangka kerja secara implisit memanggil RegisterAnchorCandidate/UnregisterAnchorCandidate, tetapi hanya pada IScrollAnchorProvider pertama yang ditemukan dalam rantai leluhur elemen tersebut.

Kerangka kerja ini juga mendaftarkan/membatalkan pendaftaran elemen dengan CanBeScrollAnchor diatur ke true saat ditambahkan atau dihapus dari pohon visual langsung. Tapi, sekali lagi, itu hanya dilakukan dengan IScrollAnchorProvider pertama yang ditemukan dalam rantai leluhur elemen.

Kontrol virtualisasi dapat memilih untuk secara otomatis mengatur CanBeScrollAnchor pada elemen anak yang dihasilkan.

ScrollViewer: Contoh

Kontrol ScrollViewer melakukan penahanan gulir selama ArrangeOverride. Ini menimbulkan peristiwa AnchorRequested di awal ArrangeOverride, yang memberi Anda kesempatan untuk secara eksplisit menentukan elemen jangkar. Jika tidak, ia memilih kandidat di viewport yang paling dekat dengan titik jangkar viewport-relative dan kemudian menetapkan elemen tersebut sebagai CurrentAnchor-nya.

Titik jangkar berasal dari properti HorizontalAnchorRatio dan VerticalAnchorRatio . Ketika rasio nol (default), titik jangkar adalah sudut kiri atas viewport (dengan asumsi FlowDirection adalah LeftToRight). Jika rasio keduanya diatur ke 0,5 maka titik jangkar adalah pusat viewport. Demikian pula, ketika rasio keduanya adalah 1,0 maka titik jangkar adalah sudut kanan bawah viewport.

Kasus Khusus: Penahanan di tepi

Awal atau akhir konten yang dapat digulir mewakili skenario jangkar khusus. Misalnya, pertimbangkan perilaku yang diharapkan ketika pengguna dalam aplikasi email telah secara vertikal menggulir ke bawah daftar dengan beberapa jumlah. Ketika pesan baru tiba, pesan disisipkan di bagian atas daftar (di luar batas konten yang saat ini dilihat pengguna). Apa yang dilihat pengguna saat ini seharusnya tidak tiba-tiba melompat ke posisi baru karena kedatangan pesan baru di bagian atas daftar. Namun, jika posisi gulir mereka saat ini berada di bagian atas, maka konten yang ada akan tampak bergeser ke bawah untuk memberi ruang bagi pesan baru.

Skenario terbalik adalah pengalaman obrolan. Ketika pengguna digulir ke bagian paling bawah dan pesan baru tiba, konten akan tampak bergeser ke atas untuk memberi ruang untuk menampilkan pesan baru. Pada kenyataannya, yang terjadi adalah bahwa viewport perlu bergeser ke bawah untuk melacak akhir baru konten yang dapat digulirkan. Ketika pengguna tidak digulir ke awal/akhir konten, maka posisi viewport sehubungan dengan beberapa konten yang terlihat yang dianggap "menarik" harus tetap sinkron (yaitu berlabuh).

ScrollViewer memperlakukan nilai 0,0 dan 1,0 untuk properti HorizontalAnchorRatio dan VerticalAnchorRatio dengan perilaku khusus. Jika nilainya adalah 0,0 dan pengguna digulir ke awal, maka posisi mulai digunakan sebagai jangkar alih-alih kandidat jangkar. Demikian pula, jika nilainya adalah 1,0 dan pengguna digulir ke akhir, maka akhir konten digunakan sebagai jangkar. Jika posisi akhir tumbuh karena perubahan ukuran maka akhir baru digunakan.

Properti

CurrentAnchor

Elemen jangkar yang saat ini dipilih untuk digunakan untuk penjangkaran gulir.

Metode

RegisterAnchorCandidate(UIElement)

Mendaftarkan UIElement sebagai kandidat jangkar gulir potensial.

UnregisterAnchorCandidate(UIElement)

Membatalkan pendaftaran UIElement sebagai kandidat jangkar gulir potensial.

Berlaku untuk

Lihat juga