Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 自动突出显示文本框或RichTextBox中的部分文本_C#_Wpf_Textbox - Fatal编程技术网

C# 自动突出显示文本框或RichTextBox中的部分文本

C# 自动突出显示文本框或RichTextBox中的部分文本,c#,wpf,textbox,C#,Wpf,Textbox,是否可以在文本框或富文本框中选择不同颜色的文本而不选择文本的某一部分来突出显示文本?事实上,我的意思是,文本的一部分由另一种不同于为文本选择指定的颜色的颜色高亮显示。为了澄清,我附上了一张显示这种行为的图片。(图片来自网站,而不是WPF)。 粗体和深绿色部分是刚刚高亮显示的文本,灰色区域是选定部分。 使用RichTextBox元素可以提供更多样式选项,据我所知,这些选项对于常规TextBox元素是不可用的 以下是我创建的一种方法: //生成示例内容 FlowDocument文档=新的FlowDo

是否可以在文本框或富文本框中选择不同颜色的文本而不选择文本的某一部分来突出显示文本?事实上,我的意思是,文本的一部分由另一种不同于为文本选择指定的颜色的颜色高亮显示。为了澄清,我附上了一张显示这种行为的图片。(图片来自网站,而不是WPF)。 粗体和深绿色部分是刚刚高亮显示的文本,灰色区域是选定部分。

使用RichTextBox元素可以提供更多样式选项,据我所知,这些选项对于常规TextBox元素是不可用的

以下是我创建的一种方法:

//生成示例内容
FlowDocument文档=新的FlowDocument();
Run runStart=新运行(“这是一个示例”);
运行runHighlight=新运行(“WPF中的文本突出显示”);
runEnd=newrun(“使用RichTextBox元素”);
//应用高光样式
runHighlight.fontwweight=fontwweights.Bold;
runHighlight.Background=brusks.LightGreen;
//创建段落
段落=新段落();
段落.Inlines.Add(runStart);
段落.内联线.添加(突出显示);
段落.内联线.添加(末端);
//将段落添加到流程文档中
文件块添加(段落);
//应用于RichTextBox
YourRichTextBoxHere.Document=doc;

我发现这篇文章很有帮助

虽然这篇文章是关于在ListView中突出显示搜索到的文本,但我已经在自己的代码中轻松地对其进行了修改,以使用几乎任何控件

从您传入的控件开始,它将递归地查找
TextBlock
s并找到所需的文本,将其提取为内联文本,并更改其
背景
/
前景
属性

如果需要,您可以轻松地将代码调整为行为

以下是一个例子:

private void HighlightText(object controlToHighlight, string textToHighlight)
{
    if (controlToHighlight == null) return;

    if (controlToHighlight is TextBlock tb)
    {
        var regex = new Regex("(" + textToHighlight + ")", RegexOptions.IgnoreCase);

        if (textToHighlight.Length == 0)
        {
            var str = tb.Text;
            tb.Inlines.Clear();
            tb.Inlines.Add(str);
            return;
        }

        var substrings = regex.Split(tb.Text);
        tb.Inlines.Clear();

        foreach (var item in substrings)
        {
            if (regex.Match(item).Success)
            {
                var run = new Run(item)
                {
                    Background = (SolidColorBrush) new BrushConverter().ConvertFrom("#FFFFF45E")
                };

                tb.Inlines.Add(run);                            
            }
            else
            {
                tb.Inlines.Add(item);
            }
        }
    }
    else
    {
        if (!(controlToHighlight is DependencyObject dependencyObject)) return;

        for (var i = 0; i < VisualTreeHelper.GetChildrenCount(dependencyObject); i++)
        {
            HighlightText(VisualTreeHelper.GetChild(dependencyObject, i), textToHighlight);
        }
    }
}
private void HighlightText(对象控件突出显示,字符串文本突出显示)
{
if(controlToHighlight==null)返回;
if(controlToHighlight为文本块tb)
{
var regex=new regex(“(“+textToHighlight+”),RegexOptions.IgnoreCase);
if(textToHighlight.Length==0)
{
var str=tb.Text;
tb.Inlines.Clear();
tb.Inlines.Add(str);
回来
}
var substring=regex.Split(tb.Text);
tb.Inlines.Clear();
foreach(子字符串中的变量项)
{
if(regex.Match(item.Success)
{
变量运行=新运行(项目)
{
背景=(SolidColorBrush)新的BrushConverter().ConvertFrom(“#fffff 45e”)
};
tb.Inlines.Add(运行);
}
其他的
{
tb.Inlines.Add(项目);
}
}
}
其他的
{
如果(!(controlToHighlight为DependencyObject DependencyObject))返回;
对于(var i=0;i

我希望这是有帮助的

RichTextBox将更有用,我通常的意思是,所有可能的容器都可以支持WPF中的文本。