我正在创建一个简单的WPF应用程序,其中一个核心功能是,无论用户点击主窗口内的网格,都会在点击位置周围出现许多按钮。 现在,我只用一个按钮就可以实现这个目的。我知道我必须捕获鼠标的当前位置,然后通过创建厚度的新实例来修改按钮边缘的4个参数(左,上,右,下)。
我设法为边距创建了新的Thickness-es,左边和上边的参数分别设置为鼠标X和Y坐标,但我不知道如何计算或使用什么作为右边和底部新创建的边距的参数。 以下是xaml.cs中的相关函数(有问题的值表示为0-s, grid 用于表示网格):
private void Grid_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
{
var mouseLocation = PointToScreen(Mouse.GetPosition(grid));
RandomButton.Margin = new Thickness(mouseLocation.X, mouseLocation.Y, 0, 0);
}
以下是xaml的相关部分:
<StackPanel>
<Button
Name="RandomButton"
Height="30"
Width="30"
Background="#FF130889"
Click="RandomButton_Click"
Content="RandomContent" />
</StackPanel>
还值得一提的是,当按钮的HorizontalAlignment设置为Left并且VerticalAlignment设置为top时,按钮似乎可以执行此设置,但仅当windowsize已满时。
我想我必须使用窗户或网格的实际高度,但我不知道如何。我知道这很简单,但我刚刚开始使用WPF,所以我提供了任何帮助!
答案 0 :(得分:0)
据我所知,问题在于确定点击相对位置。 在这种情况下,您可以使用Mouse.GetPosition方法。
以下是Canvas
的示例:
private void SetPos()
{
var relativePosition = Mouse.GetPosition(this.MainCanvas);
Canvas.SetLeft(this.btn1, relativePosition.X);
Canvas.SetTop(this.btn1, relativePosition.Y);
btn1.Visibility = Visibility.Visible;
}