繁体   English   中英

无法让 GetPositionFromPoint 正常工作(WPF、C#)

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM