WPF有没有可用的piemenu控件?
发布于 2010-06-10 18:08:27
这个问题可能早就不存在了,但只需要注意一下,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() };
}这将创建一个“切片”的馅饼。如果你想要一个真正的饼图菜单,你可以按照你想要的方式来设计。另一个选项是使其透明(将fill设置为Brushes.Transparent;it 必须有一个填充才能被命中测试可见),这对于径向上下文菜单很好。这是我工作了半个小时后的WIP (我知道间隔很糟糕):
alt text http://public.blu.livefilestore.com/y1pdW5ibqWquKGosMSch9C5KmOTKkiZ35mAI7iFKKUKf3cm7TGSquXhO8hkkL9Ln6Z3tKn74u67C27Qb_AIWQxzhg/radial.png?psid=1
编辑:啊;光标不会出现在镜头中--基本上,如果你使用路径叠加,你可以将鼠标放在实际控件之外,但仍然高亮显示它。
https://stackoverflow.com/questions/1955250
复制相似问题