Я динамически поместил пользовательский элемент управления в Canvas
как корень VisualTree
в элементе управления Thumb
. Я могу правильно перемещать элемент управления большим пальцем, но могу корректно изменять его размер только при изменении размеров с восточного, юго-восточного и южного прямоугольников, определенных в пользовательском элементе управления.
//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);
В методе DragDelta
этот подход работает для изменения размера пользовательского элемента управления с восточного прямоугольника изменения размера:
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;
}
}
Но где бы я ни пытался это сделать, плюс установил Canvas.Top
элемента управления Thumb
(т. Е. Из прямоугольника изменения размера на север), я не получал ожидаемых результатов:
double top = Canvas.GetTop(finderThumb) + e.VerticalChange;
myUserControl.Height = myUserControl.OldHeight - e.VerticalChange;
Canvas.SetTop(myThumb, top);
В таком случае происходит то, что элемент управления перемещается вверх и вниз в элементе управления холстом, но его размеры изменяются только на один пиксель, независимо от изменения по вертикали или горизонтали. Любые идеи относительно того, почему это происходит, и предложения по решению проблемы? Спасибо!