2009-08-31 7 views
1

J'essaye d'améliorer le contrôle de dessin de graphique qui vient avec le graphique #. C'est bien, mais les choses deviennent incontrôlables lorsque vous commencez à faire glisser des nœuds. C'est ma première rencontre avec WPF, donc c'est probablement une question de débutant. :)Comment réutiliser WPF ScrollViewer pour créer mon propre contrôle déroulant?

J'ai le contrôle GraphCanvas qui a des nœuds et des bords. Ils peuvent être déplacés, ce qui change leurs coordonnées, les rendant éventuellement négatives. Je voudrais ajouter des barres de défilement au contrôle qui permettrait de voir à quel point la toile est vraiment. Pour ce faire, je pense à mettre le GraphCanvas dans un ScrollViewer. Ce qui serait assez facile et direct si ce n'est pour un problème. Je ne peux pas redimensionner le GraphCanvas lui-même quand un nœud est traîné en dehors des frontières ou cela va gâcher glisser mauvais. C'est aussi le problème avec le contrôle d'origine (vérifiez, il s'agit d'un exemple d'application).

Ce serait bien si je pouvais lier la taille/l'emplacement de la barre de défilement aux propriétés de GraphCanvas, de sorte que ScrollViewer ne ferait pas défiler physiquement quelque chose, mais définirait simplement les propriétés de GraphCanvas. Cela à son tour effectuer tous les calculs réels et le défilement.

Comment cela peut-il être fait?

Répondre

0

Consultez ce lien directement à partir de MSDN. Il parle de la composition de plusieurs commandes en un seul contrôle composite:

WPF: Customizing Controls for Windows Presentation Foundation

+0

Mais comment puis-je contrôler directement les barres de défilement sans faire défiler mon précieux GraphCanvas? –

+0

Vous contrôlez les limites des barres de défilement à l'intérieur de votre contrôle composite plutôt que de les définir en dehors du composite. –

1

OK, je l'ai trouvé! Trois étapes faciles:

  1. Mettez en œuvre System.Windows.Controls.Primitives.IScrollInfo sur votre contrôle personnalisé; Ajoutez votre contrôle personnalisé à un ScrollViewer;
  2. Définissez la propriété CanContentScroll sur ScrollViewer à True.

Voila!

Questions connexes