首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >突出显示文本块中的搜索词

突出显示文本块中的搜索词
EN

Stack Overflow用户
提问于 2011-11-22 20:58:21
回答 2查看 884关注 0票数 2

我在silverlight应用程序上有一个搜索文本框,其中用户在搜索条件和结果显示在文本块中显示,要求是搜索条件匹配应突出显示在文本块中。

我见过一些在文本块中突出显示搜索词的示例,但没有一个使用mvvm模式。我在视图模型中绑定了文本块的文本属性,我试图访问内联集合来指定不同的标签,但后来才知道内联集合是不可绑定的。

代码语言:javascript
复制
<TextBlock Text="{Binding Description}"/>

此描述正在ViewModel中设置

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-11-30 05:16:19

好了,我知道如何在MVVM中做到这一点。

  1. 我使用了Telerik的RadRichTextBox控件来完成这项任务。
  2. 我创建了一个依赖属性为bindableXaml的新类&将字符串转换为RadRichTextBox的方法(在代码中创建了新的XAML,以便在此中突出显示工作,并将结果作为radDocument)
  3. Attached it返回到RadRichTextBox,因此在ViewModel中,来自DB的字符串通过StringToXaml方法转换为所需的XAML格式。您可以使用RichTextBox实现相同的结果,但是在其中创建的XAML将需要StringBuilderRegEx.Match()来突出显示。
票数 0
EN

Stack Overflow用户

发布于 2011-11-23 13:48:34

正如将要提到的,这是View功能,因此可以将其放在视图代码后面。

在你的.xaml.cs中

代码语言:javascript
复制
private void ButtonSearchRequest_Click(object sender, RoutedEventArgs e)
{
    Search(TextBoxToSearch, TextBoxSearchTerm.Text);
}

private void Search(TextBox tb, string strSearchTerm)
{
    strSearchTerm = strSearchTerm.Trim().ToLower();
    int iNextMatch = tb.Text.ToLower().IndexOf(strSearchTerm);

    if (iNextMatch >= 0)
    {
        tb.Focus();
        tb.CaretIndex = iNextMatch;
        tb.Select(iNextMatch, strSearchTerm.Length);
        tb.ScrollToLine(tb.GetLineIndexFromCharacterIndex(iNextMatch));
    }
 }
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8227207

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档