我正在创建一个简单的WPF应用程序,其中的核心功能之一是,无论用户在主窗口内的网格上单击的位置如何,都应在单击位置周围出现许多按钮。现在,我尝试仅用1个按钮来实现此目的。我知道我必须捕获鼠标的当前位置,然后通过创建Thickness-es的新实例来修改按钮的Margin(左,上,右,下)的4个参数。
我设法为Margins创建了新的Thickness-es,将left和top参数分别设置为鼠标的X和Y坐标,但是我不知道如何计算或将其用作右边和底部的参数。新创建的保证金。这是来自xaml.cs的相关功能(有问题的值表示为0-s,并且网格旨在引用网格):
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,所以我很高兴能提供任何帮助!
据我了解,问题在于确定点击的相对位置。在这种情况下,可以使用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;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句