在 TextBlock 中单击超链接的获取点 (X,Y)

Getting Point (X,Y) where clicked on hyperlink in TextBlock

我正在尝试制作 usercomponent,它可以让您单击 TextBlock 中的一个词并对其进行修改。我设法让这些词可以点击,并且能够确定我点击了哪个词。但我还需要知道点击发生的坐标。

我的代码:

<UserControl
x:Class="wordedit.EditableTextBlock"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:wordedit"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
d:DesignHeight="300"
d:DesignWidth="400">
  <Grid Name="grid">
    <TextBlock   Margin="0" Padding="0"  LineStackingStrategy="BaselineToBaseline" TextLineBounds="Full"   TextWrapping="WrapWholeWords"  Name="textBlock">
    </TextBlock>
</Grid>
</UserControl> 

C# 代码:我如何构建 TextBlock 的内联

            Run r = new Run();
            r.Text = words[i];
            Hyperlink l = new Hyperlink();
            l.Click += L_Click;
            l.Inlines.Add(r);
            textBlock.Inlines.Add(l);

    private void L_Click(Hyperlink sender, HyperlinkClickEventArgs args)
    {  // doing some user response here

    }

因为 Click 参数没有提供任何信息,甚至不允许我将 Handled 设置为 false。这意味着文本块本身不会触发 Tapped 事件。

有没有办法简单地获取坐标?谢谢!

编辑:我的其他想法。我能够轻松地从 Tapped 事件中获取 X、Y。那么是否可以将透明元素放在文本块前面以充当不可见的 canvas 并处理事件并将其传递给下面的元素?

好的,我想我通过在网格上使用 PointerReleased 事件解决了这个问题。这个活动以某种方式起作用。

        private void Grid_PointerReleased(object sender, PointerRoutedEventArgs e)
        {
        var point = e.GetCurrentPoint(grid);
        }