如何在TextBox控件的可见客户区中获取插入位置(x,y)?我需要在文本框中添加一个自动完成功能。我发现solution for WPF,但它不能在Silverlight中应用。在TextBox中获取插入位置
4
A
回答
5
public class AutoCompleteTextBox : TextBox
{
public Point GetPositionFromCharacterIndex(int index)
{
if (TextWrapping == TextWrapping.Wrap) throw new NotSupportedException();
var text = Text.Substring(0, index);
int lastNewLineIndex = text.LastIndexOf('\r');
var leftText = lastNewLineIndex != -1 ? text.Substring(lastNewLineIndex + 1) : text;
var block = new TextBlock
{
FontFamily = FontFamily,
FontSize = FontSize,
FontStretch = FontStretch,
FontStyle = FontStyle,
FontWeight = FontWeight
};
block.Text = text;
double y = block.ActualHeight;
block.Text = leftText;
double x = block.ActualWidth;
var scrollViewer = GetTemplateChild("ContentElement") as ScrollViewer;
var point = scrollViewer != null
? new Point(x - scrollViewer.HorizontalOffset, y - scrollViewer.VerticalOffset)
: new Point(x, y);
point.X += BorderThickness.Left + Padding.Left;
point.Y += BorderThickness.Top + Padding.Top;
return point;
}
}
2
除了altso's answer,我想提一提,你确实需要调用块.Measure()
和.Arrange()
方法.ActualHeight
和.ActualWidth
工作,例如,像这样(参数可能取决于你的用例):
block.Measure(new Size(double.PositiveInfinity, double.PositiveInfinity));
block.Arrange(new Rect(0, 0, block.DesiredSize.Width, block.DesiredSize.Height));
double y = block.ActualHeight;
这是在WPF需要,和劝在Silverlight(包括SL5)。否则,最终WPF中的ActualHeight
和Silverlight中奇怪的数字(在我的情况中,这些是围绕的所有文本的边界框的坐标)中的0。
作为一个独立的解决方案,你可以使用FormattedText
类做同样的伎俩。
相关问题
- 1. 如何在有选择时获取TextBox的插入位置?
- 2. 在textarea(IE)中获取插入位置
- 3. Python:获取插入位置
- 4. StringFormat,TextBox验证和插入位置
- 5. 在JTextArea中获取插入位置的XY位置
- 6. JavaScript'contenteditable' - 获取/设置插入位置
- 7. 在contentEditable iframe(Firefox)中获取并设置插入位置
- 8. 如何在silverlight文本框中获取/设置插入位置?
- 9. 在输入TextField AS3中获取插入位置(x,y)?
- 10. 获取有关插入位置
- 11. JavaScript的FreeTextBox获取插入位置(IE)
- 12. TinyMCE 4 - 获取插入位置
- 13. 如何在TextBox中使用C#获取插入光标高度?
- 14. 在TextBox/RichTextBox中获取文本的XY位置
- 15. 在javascript中的x和y坐标中获取插入位置
- 16. 插入到textBox中
- 17. 在draft.js中获取插入位置(行号)
- 18. 在JTextPane中获取插入符号位置的样式
- 19. 如何在JTextField中获取插入点的像素位置?
- 20. 在TextArea中获取插入符号的XY位置
- 21. 在非GDI应用程序中获取插入位置
- 22. 在RichTextBox_Click事件中获取插入位置
- 23. 如何从具有SPACE和ENTER键的字符串(TextBox)中获取当前字在插入位置?
- 24. 插入DIV,Textbox,Textarea等内容的插入符号位置/选择
- 25. TextBox中文本的位置
- 26. vs2008/vs2010在TextBox中有插入位置发生变化的事件吗?
- 27. WPF RichTextBox - 在当前插入位置获取整个字
- 28. CKEditor获取在自定义位置插入HTML的范围
- 29. TextBox插入样式
- 30. 在ListView中获取位置
感谢您的补充 – altso