Nuta
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować się zalogować lub zmienić katalog.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
Użyj x:Phase z rozszerzeniem znaczników {x:Bind}, aby przyrostowo renderować elementy ListView i GridView oraz poprawić płynność przewijania. x:Phase zapewnia deklaratywny sposób osiągnięcia tego samego efektu, co użycie zdarzenia ContainerContentChanging w celu ręcznego sterowania renderowaniem elementów listy. Zobacz też Zaktualizuj elementy ListView i GridView przyrostowo.
Użycie atrybutu XAML
<object x:Phase="PhaseValue".../>
Wartości XAML
| Termin | Description |
|---|---|
| PhaseValue | Liczba wskazująca fazę przetwarzania elementu. Wartość domyślna to 0. |
Uwagi
Jeśli lista jest szybko przesuwana za pomocą dotyku lub za pomocą kółka myszy, w zależności od złożoności szablonu danych lista może nie być w stanie renderować elementów wystarczająco szybko, aby nadążyć za szybkością przewijania. Dotyczy to szczególnie przenośnego urządzenia z wydajnym procesorem, takim jak tablet.
Fazowanie umożliwia przyrostowe renderowanie szablonu danych, dzięki czemu zawartość może być priorytetowo przetwarzana, a najważniejsze elementy są renderowane jako pierwsze. Umożliwia to wyświetlanie zawartości dla każdego elementu podczas szybkiego przesuwania, a także stopniowe renderowanie większej liczby elementów każdego szablonu w miarę dostępności czasu.
Example
<DataTemplate x:Key="PhasedFileTemplate" x:DataType="model:FileItem">
<Grid Width="200" Height="80">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="75" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Image Grid.RowSpan="4" Source="{x:Bind ImageData}" MaxWidth="70" MaxHeight="70" x:Phase="3"/>
<TextBlock Text="{x:Bind DisplayName}" Grid.Column="1" FontSize="12"/>
<TextBlock Text="{x:Bind prettyDate}" Grid.Column="1" Grid.Row="1" FontSize="12" x:Phase="1"/>
<TextBlock Text="{x:Bind prettyFileSize}" Grid.Column="1" Grid.Row="2" FontSize="12" x:Phase="2"/>
<TextBlock Text="{x:Bind prettyImageSize}" Grid.Column="1" Grid.Row="3" FontSize="12" x:Phase="2"/>
</Grid>
</DataTemplate>
Szablon danych opisuje 4 fazy:
- Przedstawia blok tekstowy DisplayName. Wszystkie kontrolki bez określonej fazy będą niejawnie uważane za część fazy 0.
- Wyświetla blok tekstowy o nazwie prettyDate.
- Przedstawia bloki tekstowe prettyFileSize i prettyImageSize.
- Wyświetla obraz.
Fazowanie to funkcja {x:Bind}, która współpracuje z kontrolkami pochodzącymi z ListViewBase i przyrostowo przetwarza szablon elementów na potrzeby powiązania danych. Podczas renderowania elementów listy baza ListViewBase renderuje jedną fazę dla wszystkich elementów w widoku przed przejściem do następnej fazy. Praca renderowania jest wykonywana w porcjach czasowych, aby podczas przewijania listy można było ponownie ocenić wymaganą pracę i nie wykonywać jej dla elementów, które nie są już widoczne.
Atrybut x:Phase można określić na dowolnym elemencie w szablonie danych, który używa elementu {x:Bind}. Jeśli element ma fazę inną niż 0, element będzie ukryty przed widokiem (za pośrednictwem nieprzezroczystości, a nie widoczności), dopóki ta faza nie zostanie przetworzona, a powiązania zostaną zaktualizowane. Gdy kontrolka pochodna ListViewBase zostanie przewinięta, będzie ponownie używać szablonów elementów z tych, których nie ma już na ekranie, aby renderować nowo pojawiające się elementy. Elementy interfejsu użytkownika w szablonie zachowają stare wartości, dopóki nie zostaną ponownie powiązane z danymi. Fazowanie powoduje, że krok powiązania danych jest opóźniony, a w związku z tym fazowanie musi ukrywać elementy interfejsu użytkownika, gdy są nieaktualne.
Każdy element interfejsu użytkownika może mieć tylko jedną określoną fazę. Jeśli tak, będzie to miało zastosowanie do wszystkich powiązań elementu. Jeśli nie określono fazy, przyjmuje się, że przyjmuje się fazę 0.
Liczby faz nie muszą być ciągłe i są takie same jak wartość ContainerContentChangingEventArgs.Phase. Zdarzenie ContainerContentChanging będzie zgłaszane dla każdej fazy przed przetworzeniem powiązań x:Phase.
Etapy mają wpływ tylko na powiązania {x:Bind}, a nie na powiązania {Binding}.
Fazowanie będzie stosowane tylko wtedy, gdy szablon elementu jest renderowany przy użyciu kontrolki, która obsługuje fazowanie. W systemie Windows 10 oznacza to ListView i GridView. Fazowanie nie będzie stosowane do szablonów danych używanych w innych kontrolkach elementów ani w innych scenariuszach, takich jak ContentTemplate lub Hub — w takich przypadkach wszystkie elementy interfejsu użytkownika zostaną powiązane z danymi jednocześnie.
Windows developer