Je ne trouve aucune bonne documentation pour la propriété attachée Panel.IstItemsHost. Je vois beaucoup d'exemples de personnes le définissant sur le modèle ItemsContainer pour un ItemsControl, mais la non-documentation sur MSDN n'explique pas pourquoi ou quels avantages la propriété confère. J'ai construit beaucoup de conteneurs qui ne définissent pas cette propriété, mais n'ont pas encore remarqué d'effets néfastes.Que fait exactement Panel.IsItemsHost?
Répondre
Dites que j'ai un ItemsControl. Je veux utiliser un panneau personnalisé qui fait défiler les éléments vers l'intérieur et vers l'extérieur lorsque vous faites défiler l'écran; son appelé un SwoopPanel. Maintenant, comment puis-je dire à ItemsControl d'utiliser mon SwoopPanel pour contenir les modèles qu'il crée?
La manière rapide est de mettre la ItemsPanel sur la ItemsControl:
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<lol:SwoopPanel />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
Cependant, parfois cela ne fonctionne pas pour vous. Peut-être que vous souhaitez personnaliser la présentation du SwoopPanel dans l'interface utilisateur, et que le seul moyen de contourner ce problème est de changer le modèle de contrôle de ItemsControl. Vous pouvez maintenant ajouter votre SwoopPanel directement au modèle de contrôle et, en utilisant la propriété, le marquer en tant que ItemsHost que ItemsControl mettra tous les éléments modélisés qu'il crée.
<Style TargetType="ItemsControl">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="ItemsControl">
<Border CornerRadius="5">
<ScrollViewer VerticalScrollBarVisibility="Hidden">
<lol:SwoopPanel IsItemsHost="True"/>
</ScrollViewer>
</Border>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
Avez-vous à le faire dans un sens ou dans l'autre? Non. L'un est-il plus avantageux que l'autre? Eh bien, la deuxième façon vous permet de mieux contrôler l'interface utilisateur, la première est plus facile. Faites votre choix, vraiment. Je ne l'ai jamais fait personnellement en deuxième, mais je pense qu'il pourrait y avoir quelques endroits où cela pourrait être utile.
Voir http://msdn.microsoft.com/en-us/library/system.windows.controls.panel.isitemshost(v=vs.90).aspx
Essentiellement, ce que dit cet article est que si vous remplacez le ControlTemplate d'un ListBox et que vous voulez une nouvelle mise en page, définissez IsItemsHost = true sur certains panneaux, par exemple un StackPanel. Ensuite, tous les éléments de la ListBox seront automatiquement ajoutés en tant qu'enfants du StackPanel. Si l'orientation de la ListBox est horizontale, la ListBox sera horizontale.
L'autre manière est de définir la propriété ItemsPanel de la ListBox à un ItemsTemplate et dans ce modèle vous avez un StackPanel. Dans ce cas, les éléments ListBox seront ajoutés aux enfants StackPanel comme dans le premier cas. Cependant, vous n'avez pas besoin de définir IsItemsHost = true, cela n'aura absolument aucun effet. Ceci est fait pour vous par le fait que vous définissez la propriété ItemsPanel.
c'est l'explication +1 – mkb
- 1. Que fait exactement FillMode?
- 2. Que fait exactement @synthesize?
- 3. Que fait exactement MIBCC.EXE?
- 4. Que fait exactement rangeOfCharacterFromSet?
- 5. Que fait exactement visibleContentsAsDataURL?
- 6. Que fait exactement reloadData?
- 7. WCF: Que fait exactement IsInitiating?
- 8. Que fait exactement -march = natif?
- 9. Que fait exactement l'utilitaire "ar"?
- 10. Que fait exactement System.Diagnostics.Process UseShellExecute?
- 11. EntityClient Provider - Que fait-il exactement?
- 12. Que fait exactement ce programme OpenCV?
- 13. Que fait exactement Up Vector dans DirectX?
- 14. Que fait exactement Windbg "d esp"?
- 15. Que fait exactement la directive using?
- 16. Que fait le réglage "RAILS_GEM_VERSION" exactement?
- 17. Que fait exactement "foo = (foo + 1)% bar"?
- 18. Que fait exactement la méthode .join()?
- 19. Que fait exactement ce code ML standard?
- 20. Que fait un gestionnaire de racks exactement?
- 21. Qu'est-ce que CDATA et que fait-il exactement?
- 22. que fait exactement le mot-clé prototype dans jquery?
- 23. Que fait exactement cette syntaxe de javascript getElementsByTagName?
- 24. Que fait exactement la clause "Over" dans T-Sql?
- 25. Ruby on Rails: alias_method_chain, que fait-il exactement?
- 26. Que fait exactement la règle de suppression de Nullify?
- 27. @Scheduled & scheduler: Que fait exactement la taille du pool?
- 28. Que fait exactement le profilage C++ (google cpu perf tools)?
- 29. Que fait exactement "map.resource" dans le fichier de route?
- 30. Que fait exactement Response.Redirect ("~/...") dans la réponse HTTP?
Donc, fondamentalement, le code ItemsControl notera le contrôle étant défini comme IsItemsHost dans sa hiérarchie, et si aucun ItemsPanelTemplate n'est défini, utiliser cet enfant comme conteneur pour les enfants générés? (Je suppose que c'est possible qu'il pourrait lancer si vous avez un modèle ET un enfant IsItemsHost). – Armentage
IsItemsHost n'est pas une propriété jointe –
@kai merci mis à jour. On dirait un bon candidat; se sent un peu étrange que Panel sait comment ItemsControl est implémenté. – Will