我在silverlight应用程序上有一个搜索文本框,其中搜索词和结果中的用户类型显示在文本块中,要求是搜索词匹配应在文本块中突出显示。
我见过一些在textblock中突出显示搜索词但没有使用mvvm模式的例子。我在viewmodel中绑定文本块的文本属性,我试图访问内联集合以指定不同的标签,但后来才知道内联集合不可绑定。
<TextBlock Text="{Binding Description}"/>
此说明正在ViewModel中设置
答案 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中做到这一点。
我使用Telerik的RadRichTextBox
控件来完成任务。
我创建了一个新的类,其依赖属性为bindableXaml
&amp;将字符串转换为XAML的方法(在代码中创建新RadRichTextBox
以在此处突出显示工作并将结果返回为radDocument
)
RadRichTextBox
,因此在ViewModel
中,来自DB的字符串将通过StringToXaml
方法转换为所需的XAML格式。您可以使用RichTextBox
获得相同的结果,但在其中创建的XAML需要StringBuilder
和RegEx.Match()
来突出显示工作。