gpt4 book ai didi

c# - 如何将 RichTextBox Child 中的 Inline 带入 View

转载 作者:行者123 更新时间:2023-11-30 20:03:16 25 4
gpt4 key购买 nike

如何在 RichTextBox 中聚焦 Inline
我从文本文件创建一个 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);
}

我知道它不……完美。

问题

它目前有效,但出现的问题是我的 Market Inline 没有进入 View 。有没有一种简单的方法可以将此 Inline 放入 View 中?

最佳答案

直截了当的解决方案似乎是 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 { }));
}

关于c# - 如何将 RichTextBox Child 中的 Inline 带入 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15411725/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com