J'essaie actuellement de créer une scène dans WPF où j'ai environ 250 contrôles sur mon écran et l'utilisateur peut Pan et Zoom dans et hors de ces contrôles en utilisant la souris. J'ai exécuté les outils WPF Performance Suite sur l'application quand il y a un grand nombre de ces commandes sur l'écran (c'est-à-dire lorsque l'utilisateur a fait un zoom arrière) le FPS tombe à environ 15, ce qui n'est pas très bon.Performances WPF pour un grand nombre d'éléments sur l'écran
Voici les grandes lignes du XAML:
<Window>
<Window.Resources>
<ControlTemplate x:Key="LandTemplate" TargetType="{x:Type local:LandControl}">
<Canvas>
<Path Fill="White" Stretch="Fill" Stroke="Black" StrokeThickness="1" Width="55.5" Height="74.687" Data="M0.5,0.5 L55,0.5 L55,74.187 L0.5,74.187 z"/>
<Canvas x:Name="DetailLevelCanvas" Width="24.5" Height="21" Canvas.Left="15.306" Canvas.Top="23.972">
<TextBlock Width="21" Height="14" Text="712" TextWrapping="Wrap" Foreground="Black"/>
<TextBlock Width="17.5" Height="7" Canvas.Left="7" Canvas.Top="14" Text="614m2" TextWrapping="Wrap" FontSize="5.333" Foreground="Black"/>
</Canvas>
</Canvas>
</ControlTemplate>
</Window.Resources>
...
<local:LandControl Width="55.5" Height="74.552" Canvas.Top="xxx" Template=" {StaticResource LandTemplate}" RenderTransformOrigin="0.5,0.5" Canvas.Left="xxx">
<local:LandControl Width="55.5" Height="74.552" Canvas.Top="xxx" Template=" {StaticResource LandTemplate}" RenderTransformOrigin="0.5,0.5" Canvas.Left="xxx">
<local:LandControl Width="55.5" Height="74.552" Canvas.Top="xxx" Template=" {StaticResource LandTemplate}" RenderTransformOrigin="0.5,0.5" Canvas.Left="xxx">
<local:LandControl Width="55.5" Height="74.552" Canvas.Top="xxx" Template=" {StaticResource LandTemplate}" RenderTransformOrigin="0.5,0.5" Canvas.Left="xxx">
... and so on...
</Window>
Ive a essayé de minimiser les détails dans le modèle de contrôle et j'ai même fait une découverte massive et remplacer des contrôles de mettre juste leurs éléments bruts en ligne à la place d'utiliser un modèle, mais sans améliorations notables des performances. J'ai vu d'autres questions de SO à ce sujet et les gens disent de faire du dessin personnalisé, mais je ne vois pas vraiment comment cela a du sens quand vous devez zoomer et pan comme je le fais.
Si quelqu'un peut aider ici, ce serait génial!
Mark
Merci pour les réponses détaillées, jusqu'à présent 4.0 n'est malheureusement pas possible , mais les éléments qui s'effondrent à certains niveaux de zoom semblent fonctionner, vous avez juste besoin d'être intelligent sur la façon dont vous décidez quoi montrer et quand. – Mark