Piemenu for WPF

时间:2009-12-23 20:51:52

标签: wpf controls

WPF是否有任何可用的piemenu控件?

3 个答案:

答案 0 :(得分:3)

我发现这是我最喜欢的,你可以看看:

This

度过愉快的一天。

答案 1 :(得分:3)

这个问题可能已经很久了,但只是注意到Thomas M发布的控件虽然很棒,却有一个很大的问题:你需要将鼠标悬停在实际项目而不是饼图上。这意味着饼图片不完全相邻,IMO失去了很多可控性的可点击性(Frits定律)优势。因此,虽然它看起来像一个饼图菜单,但它实际上只是径向定位所有东西。

我最终这样做了:

    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(我知道间距很糟糕):

alt text http://public.blu.livefilestore.com/y1pdW5ibqWquKGosMSch9C5KmOTKkiZ35mAI7iFKKUKf3cm7TGSquXhO8hkkL9Ln6Z3tKn74u67C27Qb_AIWQxzhg/radial.png?psid=1

编辑:啊;光标没有出现在镜头中 - 基本上,如果你使用路径叠加,你可以让鼠标在实际控制之外,但仍然会突出显示。

答案 2 :(得分:1)

这个控件还需要一些工作,但它是一个很好的起点,支持多个级别的项目。 (即:层次结构)查看here