【问题标题】:WPF Custom Panel/Control Creation -- "The Doughnut"WPF 自定义面板/控件创建——“甜甜圈”
【发布时间】:2011-05-15 08:59:31
【问题描述】:

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

基本上,目的是拥有一个控件,您可以向其提供对象列表,并将这些对象中的每一个放入一个按钮中。问题是按钮应该像甜甜圈一样排列成一个圆圈。类似于下图。

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

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

看起来我真的在这里寻找两个不同的东西,对吧?

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

其中第一个是径向布局面板(我已经看到了其中的一些)。

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

有什么想法吗?

【问题讨论】:

  • 您是否打算将通常是矩形按钮的按钮旋转并变形为圆形,或者您是否只需要每个项目容器都处于该形状,然后包含正常显示的内容(即矩形而不旋转)?
  • 我希望实现按钮的旋转和变形。我相信肯特在下面概述了一个非常漂亮的解决方案,它将达到预期的结果。
  • 你能按照你想要的方式让它工作吗?
  • 我们最终放弃了这个想法,所以我在实际实现它的道路上并没有走得太远。但我坚信,如果你按照下面的步骤,你会到达那里。它可能不会那么简单,您将不得不处理诸如根据项目数量动态调整按钮大小等事情,这可能会变得很棘手(试图让它们围绕圆而不是以一种奇怪的方式咕噜咕噜)。

标签: wpf panel itemscontrol radial


【解决方案1】:

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

  1. Panel 将孩子围成一圈。重要的是,面板必须更新其子级的只读附加依赖属性,告诉它们它们的布局位置(以度为单位的开始位置和以度为单位的结束位置)
  2. Button 模板,根据一些开始和结束位置呈现弧形。
  3. 结合两者,将按钮的开始和结束位置绑定到面板公开的附加值。

【讨论】:

  • 这听起来是个好计划!其中最难的部分将是使按钮看起来。谢谢,肯特。
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-03-07
    • 2014-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-08
    相关资源
    最近更新 更多