[英]Can't get GetPositionFromPoint to work well (WPF, C#)
我正在尝试使用 GetPositionFromPoint,并且在文档中它谈到了 snapToText 布尔值,如果为 false, “如果点不在字符的边界框内,则返回 null” 。 无论如何,我总是收到 null TextPointer,即使我的点在一个字符上。 我将代码留在这里,我使用一个复选框(称为“检查”)来查看 TextPointer 是否为 null,并且始终未选中:
Point posicion = Mouse.GetPosition(Application.Current.MainWindow);
TextPointer posAhora = richTextBox1.GetPositionFromPoint(posicion, false);
if(posAhora != null)
{
check.IsChecked = true;
}
else
{
check.IsChecked = false;
}
谢谢!
当您对特定控件内部的坐标感兴趣时,您必须计算相对于该控件的 position。 如果计算 position 相对于其他一些控制位置将与目标控制不匹配。
示例:您在大Window
中有一个小TextBox
,并且您对TextBox
内的坐标感兴趣。 你做了什么,你计算了相对于大Window
的所有位置。 现在假设尺寸为 12 * 12 的TextBox
位于 position x=20;y=20的 32 * 32 window 的右下角。
________________
| | <--- MainWindow 32 * 32
| |
| _____|
| | |
| | P | <--- TextBox 12 * 12 (x=20;y=20)
|__________|_____|
p = pointer position
鼠标指针现在位于TextBox
的中心,您可以计算:
p = Mouse.GetPosition(Application.Current.MainWindow);
p
是相对于大 32 * 32 window 计算的,计算结果为x=26;y=26 ,这是您当前和错误计算的结果。
当您使用此坐标在TextBox
中查找文本时,您显然超出了范围(在此示例中),因为TextBox
尺寸仅为 12 * 12。
现在正确计算position:
p = Mouse.GetPosition(TextBox);
p
现在是相对于TextBox
计算的,计算结果为x=6;y=6 。 该坐标现在位于TextBox
的 12 * 12 边界内,您可以在此处点击渲染文本框。
以下示例显示了当鼠标指针悬停在RichtextBox
的输入文本上时检查的CheckBox
的正确实现:
主窗口.xaml
<Window>
<StackPanel>
<CheckBox x:Name="CheckBox"/>
<!-- Enter some text and move the mouse over the text -->
<RichTextBox x:Name="RichTextBox" />
</StackPanel>
</Window>
主窗口.xaml.cs
protected override void OnMouseMove(MouseEventArgs e)
{
base.OnMouseMove(e);
var relativeMousePosition = e.GetPosition(this.RichTextBox);
this.CheckBox.IsChecked = this.RichTextBox.GetPositionFromPoint(relativeMousePosition , false) != null;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.