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 之外(例如,如果用户单击右下角)。但这应该足以获得最低限度的工作示例。
只是想知道是否可以像 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 之外(例如,如果用户单击右下角)。但这应该足以获得最低限度的工作示例。