WPF自定义面板/控件创建 - “甜甜圈”

时间:2010-11-24 21:24:36

标签: wpf panel itemscontrol radial

我希望创建一个自定义面板或控件来创建一种非常特殊的项目。

基本上,目的是拥有一个控件,你可以给出一个对象列表,它会将每个对象放入一个按钮。问题是按钮应该像圆环一样布置成圆形。与下图相似。

The Doughnut Chart

但现在想象一下,如果可以的话,每个彩色部分都是一个按钮。它们也具有按钮的所有功能,如鼠标悬停和事件。

因此,问题首当其冲: 我应该采用什么样的技术来创造这种控制? 有没有办法在按钮上进行某种“曲率”变换?

我真的好像在寻找两件事,对吧?

我的意思是,我可以将列表中的每个项目放入一个ItemsControl,其中有一个按钮作为其ItemTemplate。所以我只需要两件事:

第一个是径向布局面板(我见过其中的一些)。

第二种方法是让每个按钮都有某种旋转和曲率变换。

有什么想法吗?

2 个答案:

答案 0 :(得分:4)

我认为您正在考虑三个不同的步骤:

  1. A Panel,围绕一个圆圈布置儿童。重要的是,面板必须更新其子节点上的只读附加依赖项属性,告诉它们它们的布局位置(以度为单位的起始位置和以度为单位的结束位置)
  2. Button模板,根据某些起点和终点呈现弧形。
  3. 将两者结合起来,将按钮的起始位置和结束位置绑定到面板显示的附加值。

答案 1 :(得分:0)

解决我们遇到的同样问题的另一种方法(虽然类似)是使用面板将每个“按钮”堆叠在一起。每个按钮的形状基于2个假想圆的计算,内在和外在。然后它们被x,y坐标偏移到它们的正确位置,使得它们的原始位置成为甜甜圈的中心点。最难的部分显然是完成所有这些三角计算,但一旦完成它的简单旋转,扇形,扩展等形状你喜欢。