如何将Inline
关注到RichTextBox
?
我从文本文件中创建FlowDocument
并将其加载到我的richTextBox1
中
并根据Button_click(重新创建Inline
)在另一个之后标记一个FlowDocument
richTextBox1.SelectAll();
richTextBox1.Selection.Text = "";
string text = System.IO.File.ReadAllText(file);
int iZeile = 0;
string[] split = text.Split(new string[] {"\r\n"},StringSplitOptions.None);
foreach (string s in split)
{
if (iZeile != 27)
{
paragraph.Inlines.Add(s + "\r\n"); // adds line added without marking
}
else
{
Run run = new Run(split[27]); // adds line with marking
run.Background = Brushes.Yellow;
paragraph.Inlines.Add(run);
paragraph.Inlines.Add("\r\n");
}
iZeile++;
}
FlowDocument document = new FlowDocument(paragraph);
richTextBox1.Document = new FlowDocument();
richTextBox1.Document = document;
Keyboard.Focus(richTextBox1);
}
我知道它不是......完美。
它到目前为止工作但发生的问题是我市场Inline
没有进入View。有没有一种简单的方法可以将此Inline
带入View?
答案 0 :(得分:3)
直截了当的解决方案似乎是FrameworkContentElement.BringIntoView()
,但在将其放入下面的代码后,它最初没有任何效果。事实证明,这是其中一个时间问题(我在WinForms中看到过类似的问题),可以通过处理优秀的Windows消息来解决。 WPF没有直接等同于DoEvents()
,但存在一个众所周知的替代品。
我将其放在ButtonClick中,标记为//**
的更改:
Paragraph paragraph = new Paragraph();
Inline selected = null; //**
richTextBox1.SelectAll();
richTextBox1.Selection.Text = "";
string text = System.IO.File.ReadAllText(@"..\..\MainWindow.xaml.cs");
int iZeile = 0;
string[] split = text.Split(new string[] { "\r\n" }, StringSplitOptions.None);
foreach (string s in split)
{
if (iZeile != 27)
{
paragraph.Inlines.Add(s + "\r\n"); // adds line added without marking
}
else
{
Run run = new Run(split[27]); // adds line with marking
run.Background = Brushes.Yellow;
paragraph.Inlines.Add(run);
paragraph.Inlines.Add("\r\n");
selected = run; // ** remember this element
}
iZeile++;
}
FlowDocument document = new FlowDocument(paragraph);
richTextBox1.Document = new FlowDocument();
richTextBox1.Document = document;
Keyboard.Focus(richTextBox1);
DoEvents(); // ** this is required, probably a bug
selected.BringIntoView(); // **
辅助方法,来自here:
public static void DoEvents()
{
Application.Current.Dispatcher.Invoke(
System.Windows.Threading.DispatcherPriority.Background,
new Action(delegate { }));
}
答案 1 :(得分:2)
你应该尝试其中一种方法
richTextBox.SelectionStart = richTextBox.Text.Length;
richTextBox.ScrollToCaret();
richTextBox.AppendText(text);
richTextBox.ScrollToEnd();
修改强>
好了,在WPF RichTextBox中挖掘了一下,云你试试richTextBox.ScrollToVerticalOffset(Offset)
获得Offset可能你可以使用这个answer