【问题标题】:Search for text in windows store app在 Windows 商店应用中搜索文本
【发布时间】:2015-12-21 09:34:19
【问题描述】:

我需要在某个文本框(或其他控件)中进行搜索,但我找不到好的解决方案...

为了更清楚,我有一个文本框,当我在其中输入文本时,我需要突出显示其他 control 中的文本。

在winform应用程序中我为此编写代码,我使用RichTextBox,这不是一个大问题。

但在 Windows 商店应用程序中,我没有 RichTextBox,这里有 RichTextBlockRichEditBox,使用此控件我无法找到搜索文本的方法。

这甚至可能吗?也许我可以使用一些外部库? 请帮助和谢谢。

【问题讨论】:

    标签: c# windows-store-apps


    【解决方案1】:

    您可以使用 TextBox(用于输入)和 TextBlock(用于突出显示内容)。 TextBox 控件有一个名为 TextChanged 的​​事件,每按下一个键就会引发一个事件。 TextBlock 有一个名为 Inlines 的属性,您可以在其中放置一些文本元素(如 Span、Run 等)。 你的 TextBlock 可以这样声明:

    <TextBlock x:Name="MyTb">
        Lorem ipsum sit amet
    </TextBlock>
    

    你的文本框:

    <TextBox TextChanged="TextBox_TextChanged" />
    

    还有 TextChanged 事件:

    var txtToHighlight = (sender as TextBox)?.Text;
    if (!string.IsNullOrWhiteSpace(txtToHighlight))
    {
        var tb = MyTb;
        var currentTxt = tb.Text;
        tb.Inlines.Clear();
        var ix = currentTxt.IndexOf(txtToHighlight);
        if (ix >= 0)
        {
            var highlightContent = new Span { Foreground = new SolidColorBrush(Colors.Red) };
            highlightContent.Inlines.Add(new Run { Text = currentTxt.Substring(ix, txtToHighlight.Length) });
    
            tb.Inlines.Add(new Run { Text = currentTxt.Substring(0, ix) });
            tb.Inlines.Add(highlightContent);
            tb.Inlines.Add(new Run { Text = currentTxt.Substring(ix + txtToHighlight.Length) });
        }
        else
        {
            tb.Text = currentTxt;
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-10-28
      • 1970-01-01
      • 2016-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多