J'ai dynamiquement placé un contrôle utilisateur sur un Canvas
comme racine VisualTree
dans un contrôle Thumb
. Je peux déplacer le contrôle du pouce correctement, mais je peux seulement redimensionner correctement le contrôle lors du redimensionnement des rectangles est, sud-est et sud définis dans le contrôle utilisateur.Redimensionner Thumb Template Control sur le canevas dans WPF
//Instantiate a new Thumb control to be placed on the canvas.
var myThumb = new Thumb();
myThumb.Name = "myThumb";
//Instantiate a new ThumbTemplate and ElementFactory with my user control.
var myThumbTemplate = new ControlTemplate(typeof(Thumb));
myThumbTemplate.VisualTree = new FrameworkElementFactory(typeof(MyUserControl), "myUserControl");
//Set the thumb template to the newly instantiated template.
myThumb.Template = myThumbTemplate;
//Point the DragDelta and DragCompleted events to local methods.
myThumb.DragDelta += new DragDeltaEventHandler(myThumb_DragDelta);
myThumb.DragCompleted += new DragCompletedEventHandler(myThumb_DragCompleted);
//Add the thumb to the canvas control.
this.myCanvas.Children.Add(myThumb);
Canvas.SetZIndex(myThumb, 1);
Canvas.SetTop(myThumb, 75);
Canvas.SetLeft(myThumb, 50);
Dans la méthode DragDelta
, cette approche fonctionne pour redimensionner le contrôle de l'utilisateur du rectangle de redimensionnement de l'est:
var myThumb = sender as Thumb;
if (myThumb != null)
{
var myUserControl = myThumb.Template.FindName("myUserControl", myThumb) as MyUserControl;
if (myUserControl != null)
{
myUserControl.Width = myUserControl.OldWidth + e.HorizontalChange;
}
}
Mais chaque fois que je tente de faire, plus régler la Canvas.Top
du contrôle Thumb
(Ie . du rectangle re grandeur du Nord), je ne reçois pas les résultats que j'attendais:
double top = Canvas.GetTop(finderThumb) + e.VerticalChange;
myUserControl.Height = myUserControl.OldHeight - e.VerticalChange;
Canvas.SetTop(myThumb, top);
Qu'est-ce qui se passe alors que le contr ol se déplace de haut en bas dans le contrôle de la toile, mais ne redimensionne que d'un pixel, quel que soit le changement vertical ou horizontal. Des idées sur les raisons de cette situation et des suggestions pour résoudre le problème? Merci!
Eh bien, quand je ne cherche pas à définir le haut du contrôle, il me semble être obtenir le comportement correct en soustrayant le VerticalChange dans ce cas. En d'autres termes, la sélection de la bordure supérieure (nord) du contrôle et le déplacement vers le haut entraînent une augmentation de la hauteur du contrôle, tandis que le fait de faire glisser vers le bas entraîne une diminution de la hauteur du contrôle. Le problème est alors que la bordure N du contrôle ne reste pas avec la souris. Cependant, même la simple commutation du signe ne résout pas le problème, c'est-à-dire que le contrôle ne redimensionne que d'un pixel malgré la valeur de VerticalChange. –