首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >WPF的Piemenu

WPF的Piemenu
EN

Stack Overflow用户
提问于 2009-12-24 04:51:52
回答 3查看 2.8K关注 0票数 4

WPF有没有可用的piemenu控件?

EN

Stack Overflow用户

发布于 2010-06-10 18:08:27

这个问题可能早就不存在了,但只需要注意一下,Thomas M发布的控件虽然很棒,但有一个主要问题:您需要将鼠标悬停在实际的项目上,而不是在饼片上单击。这意味着饼片并不是完全相邻的,并且IMO击败了控件的许多可点击性(Frits定律)优势。因此,虽然它看起来像一个馅饼菜单,但它实际上只是将所有东西放在径向的位置。

我最终这样做了:

代码语言:javascript
复制
    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() };
    }

这将创建一个“切片”的馅饼。如果你想要一个真正的饼图菜单,你可以按照你想要的方式来设计。另一个选项是使其透明(将fill设置为Brushes.Transparent;it 必须有一个填充才能被命中测试可见),这对于径向上下文菜单很好。这是我工作了半个小时后的WIP (我知道间隔很糟糕):

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

编辑:啊;光标不会出现在镜头中--基本上,如果你使用路径叠加,你可以将鼠标放在实际控件之外,但仍然高亮显示它。

票数 3
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1955250

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档