Home > Mobile >  WPF add button/image to where i click
WPF add button/image to where i click

Time:04-06

Just wanted to know if its possible to do it like winform? Where i can add a button to where i last click. I tried googling but dont think i found anything similar. Will the grid for WPF be an issue where i can place my button freely on click?

Idea is to click on the coordinate and then press the button to add an image/button.

Below is what i did so far, havent added the button function yet, just wanted to know if its possible to do it as i have done so for winform before.

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;
           
 
        }

CodePudding user response:

Yes you can do it, and you would need to use a Canvas to draw the button. This can be contained inside the Grid, but AFAIK the Canvas is the only way to have a sort of "Draw" function with UI Controls.

You will want to capture the MouseUp event within the Canvas and then add your button at the location you can retrieve in the Handler.

XAML:

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

Code Behind:

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;
}

Then just have a function that will create and add a Button at these coordinates (I will assume you have some sort of "Add Button to 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);
}

You can get fancier for your needs, like if you want the center of the button to be at the Coordinates, or if you want to prevent the Button from being drawn outside the canvas (like if the user click the very bottom right corner). But this should be enough to get a minimum working example.

  • Related