2010-12-02 35 views
3

Je développe une application de tableau de bord dans laquelle j'aimerais que l'utilisateur puisse redimensionner et déplacer ses widgets graphiques vers l'emplacement S'il vous plaît. J'ai eu des problèmes avec le fait de pouvoir bouger et redimensionner en même temps. La raison pour laquelle est que lorsque les alignements de tableau sont fixés sur les points suivants:Quelles sont les différentes méthodes pour faire glisser et déplacer des objets sans utiliser l'alignement horizontal ou vertical défini sur Gauche et dessus

chart.HorizontalAlignment = HorizontalAlignment.Left; 
chart.VerticalAlignment = VerticalAlignment.Top; 

... le mouvement fonctionne parfaitement, mais le redimensionnement va devenir fou dans des directions indétectables. Si je passe les alignements à ce qui suit:

chart.HorizontalAlignment = HorizontalAlignment.Stretch; 
chart.VerticalAlignment = VerticalAlignment.Stretch; 

... le mouvement sera éteint mais le Redimensionner fonctionnera décemment.

Le code de déplacement est comme suit:

public void chart_MouseMove(object sender, MouseEventArgs e) 
{ 
    C1Chart chart = sender as C1Chart; 

     if (!ModifierKey) 
     { 
      if (isMouseCaptured) 
      { 
       // Calculate the current position of the object. 
       double deltaV = e.GetPosition(null).Y - mouseVerticalPosition; 
       double deltaH = e.GetPosition(null).X - mouseHorizontalPosition; 
       double newTop = deltaV + (double)chart.Margin.Top; 
       double newLeft = deltaH + (double)chart.Margin.Left; 

       // Set new position of object.    
       chart.Margin = new Thickness(newLeft, newTop, 0, 0); 

       // Update position global variables. 
       mouseVerticalPosition = e.GetPosition(null).Y; 
       mouseHorizontalPosition = e.GetPosition(null).X; 
      } 
     } 
} 

Le mouseVerticalPosition, mouseHorizontalPosition, IsMouseCaptured sont affectés dans une souris graphique vers le bas de l'événement et ModifierKey est booléen de dire si l'un des modificateurs de clavier sont pressés de savoir si ne pas bouger. Ce code a été retiré de MSDN, mais je suis ouvert à d'autres solutions.

Le code de redimensionnement peut être trouvé ici (Microsoft Example) ou ici (Denis Vuyka Blog). Voici ma question: Y at-il une autre façon de faire le glisser & déplacer ou le redimensionnement (Adorner Class) que je ne vois pas. Ou, est-il un moyen d'utiliser ce code avec un hack d'alignement.

Répondre

0

Avez-vous examiné le MouseDragElementBehavior? http://blogs.msdn.com/b/dphill/archive/2009/09/25/blend-behaviors.aspx

+0

Je ne l'ai pas encore. Fonctionne comme un excellent travail jusqu'à ce que je puisse trouver une solution plus propre. Merci pour la suggestion! –

+0

Mis en œuvre aujourd'hui (Je pensais que je posterais au cas où quelqu'un d'autre aurait besoin) était capable de faire: MouseDragElementBehavior mouseBehavior = new MouseDragElementBehavior(); mouseBehavior.ConstrainToParentBounds = true; mouseBehavior.Attach (graphique); et se mettre au travail. Merci encore –