搜索结果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

    
    
    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

    
    
    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>