Слияние фигур и частичное перетаскивание в WPF - PullRequest
0 голосов
/ 14 января 2011

Я хотел бы нарисовать две фигуры в WPF и объединить их вместе.Затем я хотел бы прикрепить событие перетаскивания к ОДНОЙ из исходных фигур.

Таким образом, по сути, вы можете перетаскивать, только если вы нажмете на определенную часть фигуры, но она перетянет всю фигуру вместе с вами.

Вот код:

// Set up some basic properties for the two ellipses
Point centerPoint = new Point(100, 100);
SolidColorBrush ellipseColor_1 = new SolidColorBrush(Color.FromArgb(255, 0, 0, 255));
double width_1 = 10; double height_1 = 10;
SolidColorBrush ellipseColor_2 = new SolidColorBrush(Color.FromArgb(50, 255, 0, 0));
double width_2 = 200; double height_2 = 200;

// Create the first ellipse: A small blue dot
// Then position it in the correct location (centerPoint)
Ellipse ellipse_1 = new Ellipse() { Fill = ellipseColor_1, Width = width_1, Height = height_1 };
ellipse_1.RenderTransform = new TranslateTransform(point.X - width_1 / 2, point.Y - height_1 / 2);

// Create the second ellipse: A large red, semi-transparent circle
// Then position it in the correct location (centerPoint)
Ellipse ellipse_2 = new Ellipse() { Fill = ellipseColor_2, Width = width_2, Height = height_2 };
ellipse_2.RenderTransform = new TranslateTransform(point.X - width_2 / 2, point.Y - height_2 / 2);

// ???
// How should I merge these?
// ???

// Now apply drag drop behavior to ONLY ellipse_1
MouseDragElementBehavior dragBehavior = new MouseDragElementBehavior();
dragBehavior.Attach(ellipse_1);  // This may change depending on the above

// ...
// Add new element to canvas

Этот код создает два круга (большой и маленький).Я хотел бы иметь возможность перетаскивать, только если щелкнуть маленькую, но я бы хотел, чтобы они были прикреплены, чтобы они перемещались вместе, без необходимости вручную добавлять код, который позаботится об этом.

1 Ответ

1 голос
/ 15 января 2011

Если вы поместите их обоих в Grid (или Canvas, StackPanel и т. Д.) И установите режим перетаскивания на панели, они будут «объединены». Если вы установите для IsHitTestVisible значение false на ellipse_2, он не будет реагировать на события мыши, поэтому фактически он не будет перетаскиваемым.

...