LabelLink FindLink(double px, double py) { if (links == null) { return(null); } var alloc = Label.Allocation; int offsetX, offsetY; Label.GetLayoutOffsets(out offsetX, out offsetY); var x = (px - offsetX + alloc.X) * Pango.Scale.PangoScale; var y = (py - offsetY + alloc.Y) * Pango.Scale.PangoScale; int byteIndex, trailing; if (!Label.Layout.XyToIndex((int)x, (int)y, out byteIndex, out trailing)) { return(null); } foreach (var li in links) { if (byteIndex >= li.StartIndex && byteIndex <= li.EndIndex) { return(li); } } return(null); }