WPF Stackpanel的问题:如何在Circle中对元素进行分组?

时间:2011-01-24 09:38:32

标签: wpf wpf-controls

我在圆圈中有一些控件。我想将它们分组以添加一个公共处理程序,如In WPF can I attach the same click handler to multiple buttons at once like I can in Javascript/Jquery?

所示

但是,如果我使用Stackpanel,他们将不再是圆圈,那么替代stackpanel是什么?

WPF中这是不可能的吗?

2 个答案:

答案 0 :(得分:1)

来自Blend的PathListBox会是一个选项吗? 你可以read about it here。它描述的是Silverlight,但Blend也有WPF版本。

它可以帮助您按照自己喜欢的方式排列控件,并将它们保存在一个容器中以处理事件。

答案 1 :(得分:1)

如果你完全确定,你想对所有按钮使用相同的eventhadler,你可以使用你提到的链接下描述的相同技巧。您可以使用各种容器(Grid,Canvas等)代替StackPanel。

另一种方法是使用Canvas(或Grid),并将Buttons中的Buttons放入圆形(使用Buttons上的Canvas.Left / Right / Top / Bottom属性或网格情况下)保证金属性)。然后,您可以为Canvas的MouseLeftButtonDown事件创建一个事件处理程序。通过这种方式,您可以捕捉Canvas中的每一个鼠标点击,但有时候,您可能希望在Butvas和Canvas中的其他所有内容之间做出改变(如果需要)。

这是我替代方案的一些代码(为了更好地理解):

<Canvas MouseLeftButtonDown="Canvas_MouseLeftButtonDown">
    <Button Canvas.Left="10", Canvas.Top="10"/>
    <Button Canvas.Left="60", Canvas.Top="10"/>
</Canvas>


void Canvas_MouseLeftButtonDown(object sender, MouseButtonEventArgs e)
{
    //if you want to handle the buttonclicks only
    if(e.Source is Button){
    do_your_stuff();
    }
}