WPF是否有任何可用的piemenu控件?
答案 0 :(得分:3)
答案 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(我知道间距很糟糕):
答案 2 :(得分:1)
这个控件还需要一些工作,但它是一个很好的起点,支持多个级别的项目。 (即:层次结构)查看here