【发布时间】:2013-08-02 09:54:05
【问题描述】:
我正在将应用程序从 WinForms 移植到 WPF,但在尝试获取文本框中所选内容的行号和列号时遇到了问题。我可以在 WinForms 中非常简单地做到这一点,但 WPF 有一种完全不同的方式来实现 RichTextBox,所以我不知道如何去做。
这是我的 WinForms 解决方案
int line = richTextBox.GetLineFromCharIndex(TextBox.SelectionStart);
int column = richTextBox.SelectionStart - TextBox.GetFirstCharIndexFromLine(line);
LineColumnLabel.Text = "Line " + (line + 1) + ", Column " + (column + 1);
这不适用于 WPF,因为您无法获取当前选择的索引。
这是可行的解决方案:
int lineNumber;
textBox.CaretPosition.GetLineStartPosition(-int.MaxValue, out lineNumber);
int columnNumber = richTextBox.CaretPosition.GetLineStartposition(0).GetOffsetToPosition(richTextBox.CaretPosition);
if (lineNumber == 0)
columnNumber--;
statusBarLineColumn.Content = string.Format("Line {0}, Column {1}", -lineNumber + 1, columnNumber + 1);
【问题讨论】:
-
你有没有尝试过,告诉你它是如何完全不同的?
-
您需要查找依赖关系,但这不是一件容易的事。我确实对此进行了调查,看到需要做多少工作(或者至少我需要学习多少)并更改了我的产品规格,这样我就可以避免它!如果时间对您的项目至关重要,您最好寻找第三方。
-
用我的 WinForms 解决方案更新了@Will 我可以从框中获取文本但我无法获得选择器的位置,而且我必须计算出它通过了多少行/列戴夫真可惜:(
标签: c# .net wpf wpf-controls richtextbox