【问题标题】:Get coordinates of a corner of a wpf button获取 wpf 按钮角的坐标
【发布时间】:2019-01-07 14:16:46
【问题描述】:

这看起来很简单,但确实有问题!我有一个按钮,当我点击它时,我想要一个角的 x,y 坐标,这样我就可以从按钮的某个位置弹出一个窗口。我知道按钮的高度和宽度,我可以得到我用鼠标点击的位置的坐标,但真的很难得到一个角落的坐标。这是我目前所拥有的:

Private Sub HandleClick(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs)
        Dim clickLocationPos = Mouse.GetPosition(Window.GetWindow(Me))

        Dim xPos = clickLocationPos.X
        Dim yPos = clickLocationPos.Y
    End If
End Sub

【问题讨论】:

  • 你在找哪个角落?
  • 发件人是按钮。然后stackoverflow.com/questions/386731/…
  • 所以您的实际问题不是如何获取坐标。这是如何显示与按钮相关的弹出窗口。通过PopupToolTip 元素已经可以使用的东西。
  • @PanagiotisKanavos 没有。我可以得到我的弹出窗口,它只是不在我想要的位置,我有其他一切工作,但我想要它的位置
  • @Navvy 您正在尝试将 Winforms 技术复制到 WPF。您甚至不应该尝试像这样捕获鼠标事件。谁说弹出窗口必须响应鼠标点击? WPF 使用命令。谁说你的代码需要创建和显示弹出窗口?这可以是适当显示或隐藏的目标元素。 WIndows Forms 也不计算坐标,它显示的是相互关联的窗口。

标签: wpf vb.net xaml button


【解决方案1】:

这应该给出被点击的Button相对于父窗口的左上角坐标:

Private Sub HandleClick(ByVal sender As System.Object, ByVal e As System.Windows.RoutedEventArgs)
    Dim button = CType(sender, Button)
    Dim topLeftCorner = button.TransformToAncestor(Me).Transform(New Point(0, 0))
    Dim xPos = topLeftCorner.X
    Dim yPos = topLeftCorner.Y
End Sub

【讨论】:

  • [Point] = button.TranslatePoint(New Point(0, 0), Me)或(WinForms风格)[Point] = Me.PointFromScreen(button.PointToScreen(New Point(0, 0)))
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-01-05
  • 2019-02-14
  • 2013-01-27
相关资源
最近更新 更多