C# WPF RichTextBox 滚动到文本?
C# WPF RichTextBox Scroll to text?
我正在做一个小写作游戏,但遇到了一个问题。我有一个 richtextbox,其中包含一个段落,里面有很多 运行,我希望它滚动到我有的一些 运行。我有一个 List 对象,其中包含 RTB 中的所有内联,并且 Select() 方法由于某种原因不起作用,可能是因为它是一个只读的 rtb。关于滚动到所选单词的方法有什么想法吗?
我的代码:
private bool isKey = false;
private Paragraph p;
private List<Inline> inlineList;
private int inlineIndex = 0, wpm = 0, wordIndex = 0, lineIndex = 0;
private string[] words;
public MainWindow()
{
InitializeComponent();
p = new Paragraph();
foreach (string s in words)
{
p.Inlines.Add(s);
p.Inlines.Add(" ");
}
WordBox.Document.Blocks.Clear();
WordBox.Document.Blocks.Add(p);
inlineList = p.Inlines.ToList();
inlineList[0].Background = Brushes.LightGray;
this.Activate();
InputBox.Focus();
}
//The Method I want to put the scrolling feature in:
private void MoveWord()
{
if (inlineIndex + 2 < inlineList.Count)
{
inlineList[inlineIndex].Background = Brushes.Transparent;
inlineIndex += 2;
inlineList[inlineIndex].Background = Brushes.LightGray;
WordBox.Selection.Select(inlineList[inlineIndex].ContentStart, inlineList[inlineIndex].ContentEnd);
}
else
MessageBox.Show(wpm.ToString());
}
例如:
RTB 包含:
嘿你好怎么了
单词炸肉排嘿
我希望它滚动到单词 "hey"。
我试过使用 Select() 方法,但没有用...
创建运行和添加运行(不是内联)
保存对运行的引用(例如列表)
然后调用 Runs[x].BringIntoView()
尚未在 RTB 上进行测试,但我已使用 FlowDocument 和 FlowDocumentViewer
我正在做一个小写作游戏,但遇到了一个问题。我有一个 richtextbox,其中包含一个段落,里面有很多 运行,我希望它滚动到我有的一些 运行。我有一个 List 对象,其中包含 RTB 中的所有内联,并且 Select() 方法由于某种原因不起作用,可能是因为它是一个只读的 rtb。关于滚动到所选单词的方法有什么想法吗? 我的代码:
private bool isKey = false;
private Paragraph p;
private List<Inline> inlineList;
private int inlineIndex = 0, wpm = 0, wordIndex = 0, lineIndex = 0;
private string[] words;
public MainWindow()
{
InitializeComponent();
p = new Paragraph();
foreach (string s in words)
{
p.Inlines.Add(s);
p.Inlines.Add(" ");
}
WordBox.Document.Blocks.Clear();
WordBox.Document.Blocks.Add(p);
inlineList = p.Inlines.ToList();
inlineList[0].Background = Brushes.LightGray;
this.Activate();
InputBox.Focus();
}
//The Method I want to put the scrolling feature in:
private void MoveWord()
{
if (inlineIndex + 2 < inlineList.Count)
{
inlineList[inlineIndex].Background = Brushes.Transparent;
inlineIndex += 2;
inlineList[inlineIndex].Background = Brushes.LightGray;
WordBox.Selection.Select(inlineList[inlineIndex].ContentStart, inlineList[inlineIndex].ContentEnd);
}
else
MessageBox.Show(wpm.ToString());
}
例如: RTB 包含: 嘿你好怎么了 单词炸肉排嘿
我希望它滚动到单词 "hey"。
我试过使用 Select() 方法,但没有用...
创建运行和添加运行(不是内联)
保存对运行的引用(例如列表)
然后调用 Runs[x].BringIntoView()
尚未在 RTB 上进行测试,但我已使用 FlowDocument 和 FlowDocumentViewer