Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Use x:Phase com a extensão de marcação {x:Bind} para renderizar itens ListView e GridView incrementalmente e melhorar a experiência de deslizamento. x:Phase fornece uma maneira declarativa de obter o mesmo efeito que usar o evento ContainerContentChanging para controlar manualmente a renderização de itens de lista. Consulte também Atualizar itens ListView e GridView incrementalmente.
Uso de atributos XAML
<object x:Phase="PhaseValue".../>
Valores XAML
| Term | Description |
|---|---|
| Valor da fase | Um número que indica a fase em que o elemento será processado. O padrão é 0. |
Observações
Se uma lista for movimentada rapidamente com toque ou usando a roda do mouse, dependendo da complexidade do modelo de dados, a lista pode não ser capaz de renderizar itens com rapidez suficiente para acompanhar a velocidade de rolagem. Isto é particularmente verdadeiro para um dispositivo portátil com uma CPU eficiente em termos energéticos, como um tablet.
O faseamento permite a renderização incremental do modelo de dados para que o conteúdo possa ser priorizado e os elementos mais importantes renderizados primeiro. Isso permite que a lista mostre conteúdo parcial para cada item se o deslocamento for rápido, e, se o tempo permitir, renderizará mais elementos de cada template.
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>
O modelo de dados descreve 4 fases:
- Apresenta o bloco de texto DisplayName. Todos os controlos sem uma fase especificada serão implicitamente considerados parte da fase 0.
- Mostra o bloco de texto prettyDate.
- Mostra os blocos de texto prettyFileSize e prettyImageSize.
- Mostra a imagem.
O Phasing é um recurso de {x:Bind} que funciona com controles derivados de ListViewBase e que processa incrementalmente o modelo de item para vinculação de dados. Ao renderizar itens de lista, ListViewBase renderiza uma única fase para todos os itens no modo de exibição antes de passar para a próxima fase. O trabalho de renderização é executado em lotes fatiados no tempo para que, à medida que a lista é rolada, o trabalho necessário possa ser reavaliado e não executado para itens que não estão mais visíveis.
O atributo x:Phase pode ser especificado em qualquer elemento em um modelo de dados que use {x:Bind}. Quando um elemento tem uma fase diferente de 0, o elemento ficará oculto da visualização (via Opacidade, não Visibilidade) até que essa fase seja processada e as ligações sejam atualizadas. Quando um controle derivado de ListViewBase é rolado, ele recicla os modelos de item de itens que não estão mais na tela para renderizar os itens recém-visíveis. Os elementos da interface do usuário dentro do modelo manterão seus valores antigos até que sejam vinculados a dados novamente. O faseamento faz com que essa etapa de vinculação de dados seja atrasada e, portanto, o faseamento precisa ocultar os elementos da interface do usuário caso eles estejam obsoletos.
Cada elemento da interface do usuário pode ter apenas uma fase especificada. Em caso afirmativo, isso aplicar-se-á a todas as ligações no elemento . Se uma fase não for especificada, a fase 0 será assumida.
Os números de fase não precisam ser contíguos e são iguais ao valor de ContainerContentChangingEventArgs.Phase. O evento ContainerContentChanging será gerado para cada fase antes que as ligações x:Phase sejam processadas.
O faseamento afeta apenas as ligações {x:Bind} , não as ligações {Binding} .
O faseamento só será aplicado quando o modelo de item for renderizado usando um controle ciente do faseamento. Para o Windows 10, isso significa ListView e GridView. O faseamento não se aplicará a modelos de dados usados em outros controles de item ou para outros cenários, como seções ContentTemplate ou Hub — nesses casos, todos os elementos da interface do usuário serão vinculados a dados de uma só vez.
Windows developer