Comment obtenir le panneau utilisé dans un TreeView
? J'ai lu que par défaut TreeView
utilise un VirtualizingStackPanel
pour cela. Quand je regarde un modèle TreeView
, tout ce que je vois est < ItemsPresenter/>, qui semble cacher les détails de ce panneau est utilisé.Comment obtenir le panneau dans une arborescence (WPF)
solutions possibles:
1) Sur l'instance TreeView ("TV"), à partir du code, faites ceci: tv.ItemsPanel.
Le problème est que ceci ne renvoie pas un panneau, mais un ItemsPanelTemplate ("obtient ou définit le modèle qui définit le panneau qui contrôle la disposition des éléments").
2) Créez un modèle TreeView qui remplace explicitement < ItemsPresenter/> avec votre propre ItemsControl.ItemsPanel. Je fournis un modèle spécial de toute façon, donc c'est bien dans mon scénario. Donnez ensuite un nom de pièce au panneau que vous placez dans ce modèle, et à partir du code, vous pouvez obtenir cette pièce (c'est-à-dire le panneau). Le problème avec ça? voir ci-dessous.
(J'utilise un contrôle nommé VirtualTreeview qui est dérivé de TreeView, comme on le voit ci-dessous):
<ControlTemplate x:Key="VirtualTreeViewTemplate" TargetType="{x:Type local:VirtualTreeView}">
<Border>
<local:VirtualScrollViewer
Style="{StaticResource VirtualScrollViewer}"
x:Name="PART_VirtualScrollViewer"
CanContentScroll="True">
<!-- instead of: <ItemsPresenter />, use following: -->
<ItemsControl>
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel
Name="PART_ItemsStackPanel"
IsItemsHost="True" />
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
</local:VirtualScrollViewer>
</Border>
</ControlTemplate>
[Je dépouillé tout encombrement ici pour une meilleure visibilité ...]
Le problème avec ceci: ceci surpasse immédiatement tout mécanisme de mise en page TreeView. En fait, vous obtenez simplement un écran vide, même lorsque TreeViewItems remplit l'arborescence. Eh bien, la raison pour laquelle je veux obtenir le panneau est de prendre partie dans le MeaureOverride, mais sans entrer dans tout cela, je ne veux certainement pas réécrire le livre de la façon de mettre en forme un treeview. C'est-à-dire, en faisant cela, l'étape n ° 2 semble invalider le point même d'utiliser un TreeView en premier lieu. Désolé, s'il ya une certaine confusion ici, merci pour toute aide que vous pouvez offrir.
Cela fait ce que j'ai demandé directement, merci beaucoup. Malheureusement, la plus grande chose que je suis après n'est pas résolu par ceci, qui est, j'essaye alors d'utiliser MeasureOverride sur ce panneau. Je pense que je vais devoir dériver un panneau pour remplacer une méthode cependant. Et cela, malheureusement, m'amène à l'étape # 2, où TreeView ne semble pas faire de rendu du tout seul (écran vide). Merci encore. J'ai retravaillé le code que vous avez donné et je cherche un moyen de le publier, ce qui peut être utile aux autres. –