在 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);
}
我正在尝试制作 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);
}