WPF 添加 button/image 到我点击的地方

WPF add button/image to where i click

只是想知道是否可以像 winform 那样做?我可以在上次单击的位置添加按钮。我试过谷歌搜索但不认为我发现任何类似的东西。 WPF 的网格是否会成为我可以在点击时自由放置按钮的问题?

思路是点击坐标然后按下按钮添加一个image/button.

以下是我到目前为止所做的,还没有添加按钮功能,只是想知道是否可以像我之前为 winform 那样做。

public MainWindow()
        {
            InitializeComponent();
            MainWindow.xCoord = -1;
            MainWindow.yCoord = -1;

            
        }



        private void AddEvent_Click(object sender, EventArgs e)
        {

            if (MainWindow.xCoord < 0 || MainWindow.yCoord < 0)
            {
                MessageBox.Show("Please select a coordinate");
                return;
            }

            


        }
        
        public void MainWindow_Mouseup(object sender, MouseEventArgs e)
        {

            Point p = e.GetPosition(this);
            textBox1.Text = "x-" + p.X + "y- " + p.Y;
            MainWindow.xCoord = (int)p.X;
            MainWindow.yCoord = (int)p.Y;
           
 
        }

是的,你可以做到,但你需要使用 Canvas 来绘制按钮。这可以包含在 Grid 中,但据我所知,Canvas 是使用 UI 控件获得某种“绘图”功能的唯一方法。

您需要在 Canvas 中捕获 MouseUp 事件,然后将您的按钮添加到您可以在处理程序中检索的位置。

XAML:

<Grid>
  <Canvas x:Name="ButtonCanvas" MouseUp="ButtonCanvas_MouseUp"/>
</Grid>

隐藏代码:

private void ButtonCanvas_MouseUp(object sender, MouseButtonEventArgs e)
{
   Point p = e.GetPosition(ButtonCanvas);
   textBox1.Text = "x-" + p.X + "y- " + p.Y;
   MainWindow.xCoord = (int)p.X;
   MainWindow.yCoord = (int)p.Y;
}

然后只需要一个函数,它将在这些坐标处创建并添加一个 Button(我假设您有某种“将按钮添加到 Canvas”Button):

private void AddButtonToCoord_Click(object sender, EventArgs e)
{
   var button = new Button();
   //--change button properties if you want-- 

   //add to canvas
   Canvas.Childen.Add(button);
   
   //set Control coordinates within the canvas
   Canvas.SetLeft(button, MainWindow.xCoord);
   Canvas.SetTop(button, MainWindow.yCoord);
}

您可以根据自己的需要进行更高级的设置,例如,如果您希望按钮的中心位于坐标处,或者如果您希望防止按钮绘制在 canvas 之外(例如,如果用户单击右下角)。但这应该足以获得最低限度的工作示例。