如何在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