在Windows 8 TextBox中突出显示文本

时间:2012-10-01 01:28:19

标签: c# textbox windows-8 windows-runtime

我正在寻找一种基于Windows.UI.Xaml.Controls.TextBox控件内的搜索词来突出显示(不选择)单词的方法。

似乎没有办法覆盖文本呈现行为?这可以通过文本框控件来完成吗?

编辑: 我原本试图使用RichEditBox,但是有能力粘贴我试图阻止的格式化文本的问题(我可以清除格式化的唯一事件是TextChanged,这似乎有点晚)。我还需要更多地控制高光的渲染

3 个答案:

答案 0 :(得分:2)

文本框在格式和文本选择方面非常有限。

您可能希望使用RichTextBox控件而不是TextBox,因为它为您提供了更多的选择和格式化功能,可以更轻松地突出显示多个术语。

这是一个快速入门:http://www.devx.com/dotnet/Article/34644

答案 1 :(得分:1)

我遇到了同样的问题。但是,你不知道,我会发布这个(这不是一个完整的答案,但可能会让你开始。)

您可以使用以下方式突出显示单词:

int indexOfFoundKeyword = 1;
int lastIndexOfFoundKeyword = 12;
txtbox.SelectionStart = indexOfFoundKeyword;
txtbox.SelectionLength = lastIndexOfFoundKeyword;

如果您将其放置在按钮单击事件中,然后键入大约20个字符并单击该按钮,您将看到可以突出显示Metro文本框中的单词。我遇到的问题是获取找到的关键字的开头和结尾,以便知道要分配给SelectionStartSelectionLength的值,如果我理解你的问题,我认为这就是你的位置也被困在了。

更新

好吧,这似乎有点温和,但大部分时间都有效。 (当它确实有效时准确):

    // find the word 'jason'.
    string word = "jason";
    int a, b;
    a = genericBox.Text.IndexOf(word);
    b = word.Length;

    genericBox.SelectionStart = a;
    genericBox.SelectionLength = b;

如果您要做的只是找到一些文本,然后选择它,那么这证明它可以完成。现在我知道这不是最好的方法,但这是我能够在普通TextBox中为地铁应用程序工作的唯一方法。

答案 2 :(得分:0)

也许你可以基于TextBox控件创建一个控件,或者一起创建一个自定义控件。有关更多帮助,请参阅herehere