gpt4 book ai didi

c# - 如何确定 WPF 中超链接的坐标

转载 作者:行者123 更新时间:2023-11-30 15:47:21 31 4
gpt4 key购买 nike

我有一个带有 FlowDocument 的 WPF 窗口,其中有几个超链接:

<FlowDocumentScrollViewer>
<FlowDocument TextAlignment="Left" >
<Paragraph>Some text here
<Hyperlink Click="Hyperlink_Click">open form</Hyperlink>
</Paragraph>
</FlowDocument>
</FlowDocumentScrollViewer>

在 C# 代码中,我处理 Click 事件以创建并显示一个新的 WPF 窗口:

private void Hyperlink_Click(object sender, RoutedEventArgs e)
{
if (sender is Hyperlink)
{
var wnd = new SomeWindow();
//wnd.Left = ???
//wnd.Top = ???
wnd.Show();
}
}

我需要此窗口出现在超链接的实际位置旁边。所以我假设它需要为窗口的 Left 和 Top 属性赋值。但我不知道如何获得超链接位置。

最佳答案

您可以使用 ContentStartContentEnd获取超链接开头或结尾的 TextPointer,然后调用 GetCharacterRect获取相对于 FlowDocumentScrollViewer 的边界框。如果您获得对 FlowDocumentScrollViewer 的引用,则可以使用 PointToScreen将其转换为屏幕坐标。

private void Hyperlink_Click(object sender, RoutedEventArgs e)
{
var hyperlink = sender as Hyperlink;
if (hyperlink != null)
{
var rect = hyperlink.ContentStart.GetCharacterRect(
LogicalDirection.Forward);
var viewer = FindAncestor(hyperlink);
if (viewer != null)
{
var screenLocation = viewer.PointToScreen(rect.Location);

var wnd = new Window();
wnd.WindowStartupLocation = WindowStartupLocation.Manual;
wnd.Top = screenLocation.Y;
wnd.Left = screenLocation.X;
wnd.Show();
}
}
}

private static FrameworkElement FindAncestor(object element)
{
while(element is FrameworkContentElement)
{
element = ((FrameworkContentElement)element).Parent;
}
return element as FrameworkElement;
}

关于c# - 如何确定 WPF 中超链接的坐标,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3647263/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com