Cursos
Módulo
Personalización del diseño en páginas XAML de .NET MAUI - Training
Cree interfaces de usuario coherentes en diferentes dispositivos con StackLayout y Grid.
Este explorador ya no se admite.
Actualice a Microsoft Edge para aprovechar las características y actualizaciones de seguridad más recientes, y disponer de soporte técnico.
Importante
A partir de Windows 10, versión 1703 (Creators Update), x:DeferLoadStrategy se sustituye por el atributo x:Load. El uso x:Load="False"
es equivalente a x:DeferLoadStrategy="Lazy"
, pero proporciona la capacidad de descargar la interfaz de usuario si es necesario. Consulte el atributo x:Load para obtener más información.
Puedes usar x:DeferLoadStrategy="Lazy" para optimizar el rendimiento de creación de árboles o inicio de la aplicación XAML. Cuando se usa x:DeferLoadStrategy="Lazy", se retrasa la creación de un elemento y sus elementos secundarios, lo que reduce el tiempo de inicio y los costos de memoria. Esto resulta útil para reducir los costos de los elementos que se muestran con poca frecuencia o condicionalmente. El elemento se realizará cuando se hace referencia desde el código o VisualStateManager.
Sin embargo, el seguimiento de elementos diferidos por el marco XAML agrega aproximadamente 600 bytes al uso de memoria para cada elemento afectado. Cuanto mayor sea el árbol de elementos que aplaza, más tiempo de inicio ahorrará, pero a costa de una mayor superficie de memoria. Por lo tanto, es posible usar este atributo en la medida en que el rendimiento disminuya.
<object x:DeferLoadStrategy="Lazy" .../>
Las restricciones para usar x:DeferLoadStrategy son:
Hay varias maneras diferentes de realizar los elementos diferidos:
NOTA: Una vez iniciada la creación de instancias de un elemento, se crea en el subproceso de la interfaz de usuario, por lo que podría provocar que la interfaz de usuario se desconombree si se crea demasiado a la vez.
Una vez creado un elemento diferido en cualquiera de las formas enumeradas anteriormente, suceden varias cosas:
Sin embargo, puede anidar elementos diferidos, pero deben realizarse desde el elemento más externo de . Si intenta realizar un elemento secundario antes de que se haya realizado el elemento primario, se genera una excepción.
Normalmente, se recomienda aplazar los elementos que no se pueden ver en el primer marco. Una buena guía para buscar candidatos a aplazar es buscar elementos que se crean con visibilidad contraída. Además, la interfaz de usuario desencadenada por la interacción del usuario es un buen lugar para buscar elementos que se pueden aplazar.
Tenga cuidado con aplazar los elementos en un control ListView, ya que reducirá el tiempo de inicio, pero también podría reducir el rendimiento del movimiento panorámico en función de lo que cree. Si desea aumentar el rendimiento del movimiento panorámico, consulte la documentación sobre la extensión de marcado {x:Bind} y el atributo x:Phase.
Si el atributo x:Phase se usa junto con x:DeferLoadStrategy , cuando se realiza un elemento o un árbol de elementos, los enlaces se aplican hasta e incluyen la fase actual. La fase especificada para x:Phase no afecta ni controla el aplazamiento del elemento. Cuando se recicla un elemento de lista como parte del movimiento panorámico, los elementos realizados se comportan de la misma manera que otros elementos activos y los enlaces compilados ({x:Bind} ) se procesan con las mismas reglas, incluida la fase.
Una guía general es medir el rendimiento de la aplicación antes y después para asegurarse de obtener el rendimiento que desee.
<Grid x:Name="DeferredGrid" x:DeferLoadStrategy="Lazy">
<Grid.RowDefinitions>
<RowDefinition Height="Auto" />
<RowDefinition Height="Auto" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto" />
<ColumnDefinition Width="Auto" />
</Grid.ColumnDefinitions>
<Rectangle Height="100" Width="100" Fill="#F65314" Margin="0,0,4,4" />
<Rectangle Height="100" Width="100" Fill="#7CBB00" Grid.Column="1" Margin="4,0,0,4" />
<Rectangle Height="100" Width="100" Fill="#00A1F1" Grid.Row="1" Margin="0,4,4,0" />
<Rectangle Height="100" Width="100" Fill="#FFBB00" Grid.Row="1" Grid.Column="1" Margin="4,4,0,0" />
</Grid>
<Button x:Name="RealizeElements" Content="Realize Elements" Click="RealizeElements_Click"/>
private void RealizeElements_Click(object sender, RoutedEventArgs e)
{
// This will realize the deferred grid.
this.FindName("DeferredGrid");
}
Cursos
Módulo
Personalización del diseño en páginas XAML de .NET MAUI - Training
Cree interfaces de usuario coherentes en diferentes dispositivos con StackLayout y Grid.