Piemenu для WPF - PullRequest
       11

Piemenu для WPF

4 голосов
/ 23 декабря 2009

Есть ли какие-нибудь рабочие элементы управления для WPF?

Ответы [ 3 ]

3 голосов
/ 10 июня 2010

Этот вопрос, вероятно, давно устарел, но просто отметим, что элемент управления, опубликованный Томасом М, хотя и является замечательным, имеет серьезную проблему: вам нужно навести курсор мыши и щелкнуть по фактическому элементу, а не по кругу. Это означает, что кусочки пирога не являются полностью смежными, и 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

РЕДАКТИРОВАТЬ: ах; курсор не появляется на снимке - в основном, если вы используете наложение пути, вы можете оставить мышь вне фактического элемента управления, но при этом выделите ее.

3 голосов
/ 24 декабря 2009

Я нашел это в своем любимом, вы можете посмотреть на:

Это

хорошего дня.

1 голос
/ 29 июля 2010

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

...