2010-11-17 6 views
2

Je travaille sur une application de tableau de bord dans laquelle j'aimerais que l'utilisateur redimensionne les widgets sur un canevas. En regardant autour, la meilleure solution pour moi semblait utiliser la classe ResizingAdorner de Microsoft. L'exemple peut être trouvé here et le code peut être trouvé here (environ un quart de la page). Tout semblait fonctionner jusqu'à ce que je clique sur l'un des widgets (commandes graphiques de ComponentOne). Le coin inférieur droit adorner et le coin supérieur droit adorner semblaient apparaître à propos de la largeur de la et de la hauteur du côté de la toile lorsque jamais déplacé. Voir exemple ci-dessous:C# WPF Redimensionner le numéro

alt text alt text

Je suis allé à la question StackOverflow here sur l'utilisation d'un séparateur de grille, mais cela ne fonctionnera pas pour moi puisque les contrôles seront colonnes de la grille se chevauchent.

je aussi avoir été à un semblable question, mais le premier answer ne fonctionne pas du tout, et le second answer juste des points simplement à un blog où l'homme travaille soit pour Microsoft et a créé la classe ResizingAdorner ou tout simplement copié le code à partir du site d'échantillons wpf. J'ai également essayé est le code révisé here mais sans chance. Y at-il une solution rapide, je ne vois pas

Répondre

1

Lorsque l'on regarde dans le code un peu plus, je trouve une partie qui a été soustrait x et y de la largeur et la hauteur, même pensé que je n'étais pas traînant encore l'adorateur. alors j'ai changé le code suivant dans leur exemple:

protected override Size ArrangeOverride(Size finalSize) 
     { 
      // desiredWidth and desiredHeight are the width and height of the element that's being adorned. 
      // These will be used to place the ResizingAdorner at the corners of the adorned element. 
      double desiredWidth = AdornedElement.DesiredSize.Width; 
      double desiredHeight = AdornedElement.DesiredSize.Height; 
      // adornerWidth & adornerHeight are used for placement as well. 
      double adornerWidth = this.DesiredSize.Width; 
      double adornerHeight = this.DesiredSize.Height; 

      topLeft.Arrange(new Rect(-adornerWidth/2, -adornerHeight/2, adornerWidth, adornerHeight)); 
      topRight.Arrange(new Rect(desiredWidth - adornerWidth/2, -adornerHeight/2, adornerWidth, adornerHeight)); 
      bottomLeft.Arrange(new Rect(-adornerWidth/2, desiredHeight - adornerHeight/2, adornerWidth, adornerHeight)); 
      bottomRight.Arrange(new Rect(desiredWidth - adornerWidth/2, desiredHeight - adornerHeight/2, adornerWidth, adornerHeight)); 

      // Return the final size. 
      return finalSize; 
     } 

au code suivant:

protected override Size ArrangeOverride(Size finalSize) 
     { 
      // desiredWidth and desiredHeight are the width and height of the element that's being adorned. 
      // These will be used to place the ResizingAdorner at the corners of the adorned element. 
      double desiredWidth = AdornedElement.DesiredSize.Width; 
      double desiredHeight = AdornedElement.DesiredSize.Height; 
      // adornerWidth & adornerHeight are used for placement as well. 
      double adornerWidth = this.DesiredSize.Width; 
      double adornerHeight = this.DesiredSize.Height; 

      //Orginal Microsoft code 
      //topLeft.Arrange(new Rect(-adornerWidth/2, -adornerHeight/2, adornerWidth, adornerHeight)); 
      //topRight.Arrange(new Rect(desiredWidth - (adornerWidth/2), - adornerHeight/2, adornerWidth, adornerHeight)); 
      //bottomLeft.Arrange(new Rect(-adornerWidth/2, desiredHeight - adornerHeight/2, adornerWidth, adornerHeight)); 
      //bottomRight.Arrange(new Rect(desiredWidth - (adornerWidth/2), desiredHeight - adornerHeight/2, adornerWidth, adornerHeight)); 


      topLeft.Arrange(new Rect(-adornerWidth/2, -adornerHeight/2, adornerWidth, adornerHeight)); 
      topRight.Arrange(new Rect(adornerWidth/2, -adornerHeight/2, adornerWidth, adornerHeight)); 
      bottomLeft.Arrange(new Rect(-adornerWidth/2, adornerHeight/2, adornerWidth, adornerHeight)); 
      bottomRight.Arrange(new Rect(adornerWidth/2, adornerHeight/2, adornerWidth, adornerHeight)); 

      // Return the final size. 
      return finalSize; 
     } 

Je ne l'ai pas connu de bizarreries encore, mais il semble juste.

Questions connexes