搜索结果TextHighlighter或TextRange是否可以绑定到UWP XAML中的数据模板?
我有一个搜索结果TextHighlighter或TextRange是否可以绑定到UWP XAML中的数据模板?,xaml,listview,uwp,binding,Xaml,Listview,Uwp,Binding,我有一个SearchResult类,它绑定到ListView。我特别想做的是突出显示搜索结果文本中与用户输入的查询匹配的代码段 相关的XAML如下所示(省略绒毛): 我可以添加SearchResult类中的任何属性,可以是TextHighlighter或TextRange。我只是不知道XAML语法是否允许插入该值 我也想过在代码中这样做,但我确实希望将搜索项模板保留在XAML中,而不是放在C#中。但是,可以执行类似于lvSearchResults.Items[i]…的操作,或者将其放入高亮或
SearchResult
类,它绑定到ListView
。我特别想做的是突出显示搜索结果文本中与用户输入的查询匹配的代码段
相关的XAML如下所示(省略绒毛):
我可以添加SearchResult
类中的任何属性,可以是TextHighlighter
或TextRange
。我只是不知道XAML语法是否允许插入该值
我也想过在代码中这样做,但我确实希望将搜索项模板保留在XAML中,而不是放在C#中。但是,可以执行类似于
lvSearchResults.Items[i]…
的操作,或者将其放入高亮或范围内的任何操作。目前我无法找到正确的方法。如果您计划创建本地突出显示的搜索结果列表,可以尝试以下方法:
公共类搜索结果
{
公共字符串DisplayText{get;set;}
公共字符串HighlightText{get;set;}
}
UserControl
以显示结果
SearchResultBlock.xaml.cs
公共密封部分类SearchResultBlock:UserControl
{
公共SearchResultBlock()
{
this.InitializeComponent();
}
公共搜索结果
{
获取{return(SearchResult)GetValue(ResultProperty);}
set{SetValue(ResultProperty,value);}
}
公共静态只读从属属性ResultProperty=
DependencyProperty.Register(“结果”)、typeof(SearchResult)、typeof(SearchResultBlock)、new PropertyMetadata(空、new PropertyChangedCallback(结果更改
私有静态无效结果\u已更改(DependencyObject d、DependencyPropertyChangedEventArgs e)
{
如果(e.NewValue!=null&&e.NewValue是搜索结果数据)
{
var instance=d作为SearchResultBlock;
instance.ResultBlock.Inlines.Clear();
var sp=data.DisplayText.Split(data.HighlightText);
Add(新运行{Text=sp.First()});
Add(新运行{Text=data.HighlightText,前台=newsolidColorBrush(Colors.Red)});
如果(sp.Length>1)
Add(新运行{Text=sp.Last()});
}
}
}
DataTemplate
通过字符串拆分,创建不同类型的Run
s并将它们合并到TextBlock
中。这也可以实现高亮显示效果
致以最诚挚的问候。如果您计划创建本地突出显示的搜索结果列表,您可以尝试以下方法:
公共类搜索结果
{
公共字符串DisplayText{get;set;}
公共字符串HighlightText{get;set;}
}
UserControl
以显示结果
SearchResultBlock.xaml.cs
公共密封部分类SearchResultBlock:UserControl
{
公共SearchResultBlock()
{
this.InitializeComponent();
}
公共搜索结果
{
获取{return(SearchResult)GetValue(ResultProperty);}
set{SetValue(ResultProperty,value);}
}
公共静态只读从属属性ResultProperty=
DependencyProperty.Register(“结果”)、typeof(SearchResult)、typeof(SearchResultBlock)、new PropertyMetadata(空、new PropertyChangedCallback(结果更改
私有静态无效结果\u已更改(DependencyObject d、DependencyPropertyChangedEventArgs e)
{
如果(e.NewValue!=null&&e.NewValue是搜索结果数据)
{
var instance=d作为SearchResultBlock;
instance.ResultBlock.Inlines.Clear();
var sp=data.DisplayText.Split(data.HighlightText);
Add(新运行{Text=sp.First()});
Add(新运行{Text=data.HighlightText,前台=newsolidColorBrush(Colors.Red)});
如果(sp.Length>1)
Add(新运行{Text=sp.Last()});
}
}
}
DataTemplate
通过字符串拆分,创建不同类型的Run
s并将它们合并到TextBlock
中。这也可以实现高亮显示效果
致以最良好的祝愿
<DataTemplate>
<StackPanel>
<!-- Search result -->
<RichTextBlock>
<!-- Would this idea work? -->
<RichTextBlock.TextHighlighters>
<TextHighlighter>
<TextHighlighter.Ranges>
<!-- Add the bound range here-->
<!-- {Binding Range} or text highlighter or something -->
</TextHighlighter.Ranges>
</TextHighlighter>
</RichTextBlock.TextHighlighters>
<Paragraph>
<Run Text="{Binding Text}"></Run>
</Paragraph>
</RichTextBlock>
</StackPanel>
</DataTemplate>