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

时间:2011-11-22 12:58:21

标签: silverlight xaml mvvm textblock

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

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

<TextBlock Text="{Binding Description}"/>

此说明正在ViewModel中设置

2 个答案:

答案 0 :(得分:2)

如前所述,这是View功能,因此将其置于后面的Views代码中是可以接受的。

在您的.xaml.cs

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));
    }
 }

答案 1 :(得分:0)

好的,我想出了如何在MVVM中做到这一点。

  1. 我使用Telerik的RadRichTextBox控件来完成任务。

  2. 我创建了一个新的类,其依赖属性为bindableXaml&amp;将字符串转换为XAML的方法(在代码中创建新RadRichTextBox以在此处突出显示工作并将结果返回为radDocument

  3. 将其附加到RadRichTextBox,因此在ViewModel中,来自DB的字符串将通过StringToXaml方法转换为所需的XAML格式。您可以使用RichTextBox获得相同的结果,但在其中创建的XAML需要StringBuilderRegEx.Match()来突出显示工作。