Question

J'ai un contrôle utilisateur WPF qui se lie à un DataTable et génère un CheckBox et un EditBox masqué pour chaque ligne d'un DataTable . J'ai plusieurs exemples de ce contrôle sur mon formulaire. Le nombre total de CheckBox à générer est supérieur à 200. Je constate des problèmes de performances de rendu. Le formulaire se charge instantanément avec tous les contrôles statiques (zones de texte, menus déroulants), puis quelques secondes plus tard, les CheckBox apparaissent.

Avez-vous des idées?

Merci

Était-ce utile?

La solution

À moins que les 200 éléments ne soient visibles à l'écran, vous devez utiliser une sorte de disposition virtuelle qui crée l'arborescence visuelle uniquement pour les éléments visibles. Cela améliorera grandement vos performances.

Autres conseils

Qu'est-ce qui "génère"? les cases à cocher? Vous devriez utiliser un ItemsControl (ou une sous-classe) et lier les données qui représentent les cases à cocher. En supposant que vous le fassiez, ce que vous voulez faire est d’obtenir que ItemsControl utilise & virtual; virtualization " en appliquant la propriété VirtualizingStackPanel.IsVirtualizing au ItemsControl comme suit:

<ItemsControl VirtualizingStackPanel.IsVirtualizing="true" ... >

Vous pouvez également activer le service "Recyclage de conteneurs". ce qui aidera également la performance. Cela se fait également avec une propriété attachée:

<ItemsControl VirtualizingStackPanel.VirtualizationMode="Recycling" ... >

Trop de cases à cocher coûtent sûrement beaucoup, si vous regardez les modèles de contrôles de base, ils sont également remplis de nombreux éléments.

Je vous conseillerais de diviser votre interface utilisateur en onglets ou accordines, ce qui créerait des éléments moins visibles sur un seul écran et aiderait également l'utilisateur à naviguer facilement et rapidement vers les éléments.

VirtualizingStackPanel aidera, mais si votre liaison n’est pas correcte, des résultats imprévus peuvent en résulter.

  1. Modèle de contrôle personnalisé: Vous pouvez également créer votre propre modèle de case à cocher personnalisé avec le moins de droits UIE, comme un simple rectangle rempli de couleur différente sur le déclencheur de propriété IsChecked. Cela éliminera peu d'animations, etc., susceptibles d'améliorer vos performances de rendu. Je pense que CheckBox est le moins important en ce qui concerne l'animation de l'interface utilisateur.

  2. Lorsque vous êtes sûr d'utiliser le " Texte " en tant que contenu, créez simplement un modèle avec un rectangle pour afficher la valeur remplie / vide et placez TextBlock avec une liaison de modèle au contenu.

  3. Essayez de donner une largeur / hauteur fixe à votre case à cocher. Chaque fois que vous corrigez la hauteur / largeur de vos contrôles / conteneurs, il est plus facile pour le gestionnaire de disposition de les restituer, plutôt que de continuer à calculer et à ajuster les éléments.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top