Этот вопрос, вероятно, давно устарел, но просто отметим, что элемент управления, опубликованный Томасом М, хотя и является замечательным, имеет серьезную проблему: вам нужно навести курсор мыши и щелкнуть по фактическому элементу, а не по кругу. Это означает, что кусочки пирога не являются полностью смежными, и IMO побеждает многие преимущества элемента управления, связанные с кликабельностью (закон Фрица). Так что, хотя выглядит как круговое меню, на самом деле оно просто позиционирует все в радиальном направлении.
Я закончил тем, что сделал:
private static Path makeDeliciousKeyLimePieSlice(double innerRadius, double outerRadius,
double startAngle, double endAngle, Vector ofs)
{
Point p1 = new Point(Math.Cos(endAngle) * innerRadius, Math.Sin(endAngle) * innerRadius) + ofs;
Point p2 = new Point(Math.Cos(startAngle) * innerRadius, Math.Sin(startAngle) * innerRadius) + ofs;
Point p3 = new Point(Math.Cos(startAngle) * outerRadius, Math.Sin(startAngle) * outerRadius) + ofs;
Point p4 = new Point(Math.Cos(endAngle) * outerRadius, Math.Sin(endAngle) * outerRadius) + ofs;
PathFigure fig = new PathFigure(p1, new PathSegment[] {
new ArcSegment(p2, new Size(innerRadius, innerRadius), endAngle - startAngle, false, SweepDirection.Counterclockwise, true),
new LineSegment(p3, true),
new ArcSegment(p4, new Size(outerRadius, outerRadius), startAngle - endAngle, false, SweepDirection.Clockwise, true),
}, true).GetAsFrozen();
return new Path { Data = new PathGeometry(new[] { fig }).GetAsFrozen() };
}
Это создаст «кусок» пирога. Вы можете стилизовать это, как вы хотите, если вы хотите истинное круговое меню. Другой вариант - сделать его прозрачным (установите заливку на Brushes.Transparent
; для нее необходимо иметь заливку, видимую для теста попадания), что хорошо подходит для радиальных контекстных меню. Вот мой WIP после примерно получаса работы (я знаю, что расстояние отстой):
альтернативный текст http://public.blu.livefilestore.com/y1pdW5ibqWquKGosMSch9C5KmOTKkiZ35mAI7iFKKUKf3cm7TGSquXhO8hkkL9Ln6Z3tKn74u67C27Qb_AIWQxzhg/radial.png?psid=1
РЕДАКТИРОВАТЬ: ах; курсор не появляется на снимке - в основном, если вы используете наложение пути, вы можете оставить мышь вне фактического элемента управления, но при этом выделите ее.