2009-03-23 4 views
1

La fonctionnalité d'interface n'est pas importante (en ce moment) avec les enfants, mais il serait utile s'il y avait un moyen de dire que l'enfant peut être à la fois «ici» et «là» et qu'il devrait être traité comme un seul objet. J'implémente une visionneuse défilante et répétitive qui traite sa toile comme un plan répétitif, et j'aimerais pouvoir la répéter intelligemment lorsque la taille occupée par tous les objets affichés est inférieure à la taille de le panel. C'est-à-dire qu'au moins un élément serait montré deux fois.En utilisant WPF, puis-je (facilement) implémenter un contrôle de panneau qui me permet d'afficher un seul élément plusieurs fois

AFAIK, ce n'est pas possible en utilisant une implémentation de panneau naïve? Y a-t-il de la magie que je peux utiliser pour organiser deux fois un élément sur l'écran?

Répondre

1

Je voudrais juste utiliser deux listes avec la même information. Je ne suis peut-être pas le meilleur pour la perfomance, (je n'ai pas de données pour ou contre), mais si vous utilisez un VirtualizingScrollViewer, il rendra seulement ce qui est visible.

<Window> 
    <Window.Resources> 
    <local:MyDataSource x:Key="myDataSource" /> 

    <ItemsPanelTemplate x:Key="stackTemplate"> 
     <StackPanel IsItemsHost="True" /> 
    </ItemsPanelTemplate> 
    </Window.Resources> 
    <Border> 

    <ScrollViewer> 
     <StackPanel VirtualizingStackPanel.IsVirtualizing="True" DataContext="{StaticResource cusomtersDataSource}"> 
     <ItemsControl ItemsSource="{Binding Customers}" ItemsPanel="{StaticResource stackTemplate}" /> 
     <ItemsControl ItemsSource="{Binding Customers}" ItemsPanel="{StaticResource stackTemplate}" /> 
     </StackPanel> 
    </ScrollViewer> 
    </Border> 
</Window> 
+0

Une sorte de travail, la seule façon d'y parvenir est d'ajouter les éléments (directement ou indirectement) plusieurs fois? Je veux dire, il n'y a pas de méthode à rendre deux fois? –

+0

Oui, comme je l'ai dit, je ne suis pas sûr de savoir comment cela affecterait les performances. mais c'est pourquoi c'est dans un VirtualizingStackPanel – bendewey

1

Avez-vous essayé d'utiliser un VisualBrush avec carrelage, ou si vous voulez être en mesure de positionner l'élément « miroir » utiliser indépendamment un rectangle avec le VisualBrush comme remplissage.

je ne suis pas tout à fait sûr que nous sommes sur la même piste ici ...

+0

Le visualbrush est non-interactif cependant. L'idée est que je voudrais essentiellement pouvoir utiliser le ArrangeOverride pour "arranger" un élément plusieurs fois. Vous savez, ici, là, etc. –

+0

Oui, ce n'est pas possible. un itemscontrol avec des datatemplates qui se positionnent sur le panneau itemscontrols en fonction des données est le plus proche que vous obtiendrez (je suppose) :) –

1

Je ne pense pas qu'il est possible de rendre un élément à deux endroits (puisque chaque élément conserve la trace de sa propre taille/emplacement à partir de la carte Mesurer/Organiser). De plus, vous ne pouvez pas ajouter un élément en tant qu'enfant à deux parents, vous obtiendrez une exception.

L'approche VisualBrush va probablement vous rapprocher, mais comme vous avez commenté cette réponse, elle n'est pas interactive. Voulez-vous afficher UIElements ou êtes-vous lié à certaines données? Si vous affichez un objet de données, vous pouvez toujours créer un nouveau ContentPresenter et définir son contenu sur l'objet de données. Si vous affichez un UIElement, ne savez pas s'il existe un moyen d'atteindre votre objectif.

Questions connexes