WPF Stackpanel 的问题:如何对 Circle 中的元素进行分组?
我在圆圈中有一些控件。我想将它们分组以添加一个通用处理程序,如下所示 在 WPF 中,我可以像在 Javascript/Jquery 中那样一次将相同的点击处理程序附加到多个按钮吗?
但如果我使用 Stackpanel,它们就不会不再循环,那么 stackpanel 的替代方案是什么?
那么这在 WPF 中不可能吗?
I have some controls in circle. I want to group them to add a common handler as seen here In WPF can I attach the same click handler to multiple buttons at once like I can in Javascript/Jquery?
But if I use Stackpanel they won't be no more in circle so what alternative to stackpanel ?
So is this impossible in WPF ?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
Blend 中的 PathListBox 是一个选项吗?
您可以在这里阅读相关内容。它是针对 Silverlight 进行描述的,但 Blend 也有 WPF 版本。
它将帮助您以任何您喜欢的方式排列控件,并且仍然将它们包含在单个容器中以处理事件。
Would the PathListBox from Blend be an option?
You can read about it here. It is described for Silverlight but Blend also has a WPF version.
It would help you to arrange the controls any way you like and still keep them contained in a single container to handle events.
如果您绝对确定要对所有按钮使用相同的 eventhadler,则可以使用您提到的链接下描述的相同技巧。您可以使用任何种类的容器(Grid、Canvas 等)来代替 StackPanel。
另一种方法是,如果您使用画布(或网格),并将按钮放入其中,形成圆形(使用按钮上的 Canvas.Left/Right/Top/Bottom 属性,或者在网格的情况下使用 Margin 属性) )。然后您可以为 Canvas 的 MouseLeftButtonDown 事件创建一个事件处理程序。通过这种方式,您可以捕获画布中的每次鼠标单击,但有时,您可能希望在按钮和画布中的其他所有内容之间进行区分(如果需要)。
这是我的替代方案的一些代码(为了更好地理解):
If you are absolutely sure, that you want to use the same eventhadler for all the buttons, you can use the same trick described under the link you mentioned. Instead of StackPanel you can use any variety of containers (Grid, Canvas etc).
An alternative approach is if you use a Canvas (or a Grid), and put the Buttons in it in a circular shape (using the Canvas.Left/Right/Top/Bottom properties on the Buttons or in case of a Grid the Margin property). Then you could create an eventhandler for MouseLeftButtonDown event of the Canvas. This way you can catch every mouseclick inside the Canvas, but then sometimes, you would want to make a difference between Buttons and everything else in the Canvas (if you need).
Here's a little code for my alternative (for better understanding):