如何在WrapPanel中的鼠标单击点添加控件

时间:2012-06-24 19:07:17

标签: c# wpf wrappanel

我的程序中有一个WrapPanel,在运行时添加了一些按钮(就像在本网站中添加标签的面板一样)。现在我想在按钮之间单击并在单击鼠标的位置添加一个新按钮。但我不知道如何在按钮之间获取鼠标位置或如何获取鼠标单击前放置的按钮的子索引! / p>

我应该说我必须使用WrapPanel,我不想使用Canvas或其他容器。

感谢您的帮助..

2 个答案:

答案 0 :(得分:0)

MouseClick的{​​{1}}事件中使用此代码:

WrapPanel

更新:

Button b = new Button();
b.Location = new Point(MousePosition.X-this.ClientSize.Width, MousePosition.Y-this.ClientSize.Height);
this.Controls.Add(b);

更新2:

Button b = new Button();
b.Location = new Point(MousePosition.X - this.ClientSize.Width, MousePosition.Y - this.ClientSize.Height);
this.WrapPanel1.Controls.Add(b);

答案 1 :(得分:0)

这个代码解决了我的问题:

  private void wpContainer_MouseDown(object sender, MouseButtonEventArgs e)
    {
        Button newButton = new Button()
                         {
                             Content= wpContainer.Children.Count,

                             Margin = new Thickness()
                             {
                                 Right = 10,

                                 Left = 10,
                             }
                         };

        var mousePosition = Mouse.GetPosition(wpContainer);

        int index=0;

        foreach (var child in wpContainer.Children)
        {
            Button currentButton = (child as Button);

            if (currentButton==null)
                continue;

            Point buttonPosition = currentButton.TransformToAncestor(wpContainer).Transform(new Point(0, 0));

            if (buttonPosition.X  > mousePosition.X && buttonPosition.Y+currentButton.ActualHeight > mousePosition.Y)
            {
                wpContainer.Children.Insert(index, newButton);

                return;                    
            }

            index++;
        }

        if(wpContainer.Children.Count==0 || index==wpContainer.Children.Count) //no items where detected so add it to the end of the Children
            wpContainer.Children.Add(newButton);
    }