WPF文本控件仅限颜色

时间:2015-06-08 06:31:47

标签: wpf colors textbox richtextbox

我需要一个文本控件,用户可以在其中编辑文本,文本的某些部分可以根据文本使用不同的颜色。基本上,想象一下Visual Studio源文件编辑器或任何其他源文件编辑器,它为源代码着色。 WPF控制的是什么?我所知道的WPF中的三个选项都不合适:

TextBox 不允许使用颜色

TextBlock 不允许用户编辑文字

RichTextBox 允许太多 - 我只想要颜色。

也许RichTextBox可以修复其他文本格式(即字体,粗体,斜体)?有什么想法吗?

3 个答案:

答案 0 :(得分:4)

这是一个(非常)粗略的例子,坚持使用TextBox和TextBlock:只是为了好玩,但值得......

enter image description here

这是XAML ......

<Grid>
    <TextBlock
        x:Name="Tx1"
        HorizontalAlignment="{Binding Path=HorizontalAlignment, ElementName=Tb1}"
        VerticalAlignment="{Binding Path=VerticalAlignment, ElementName=Tb1}"
        Margin="{Binding Path=Margin, ElementName=Tb1}"
        FontSize="{Binding Path=FontSize, ElementName=Tb1}"
        />

    <TextBox
        x:Name="Tb1"
        HorizontalAlignment="Stretch"
        VerticalAlignment="Center"
        Margin="100,0"
        FontSize="24"
        Background="Transparent"
        Foreground="Transparent"
        TextChanged="Tb1_TextChanged"
        />
</Grid>

......这里有一些代码......

    private void Tb1_TextChanged(object sender, TextChangedEventArgs e)
    {
        var inlines = this.Tx1.Inlines;
        inlines.Clear();

        foreach (char ch in this.Tb1.Text)
        {
            if (Char.IsDigit(ch))
            {
                var run = new Run(ch.ToString());
                run.Foreground = Brushes.Blue;
                inlines.Add(run);
            }
            else if (Char.IsLetter(ch))
            {
                var run = new Run(ch.ToString());
                run.Foreground = Brushes.Red;
                inlines.Add(run);
            }
            else
            {
                var run = new Run(ch.ToString());
                run.Foreground = Brushes.LimeGreen;
                inlines.Add(run);
            }
        }
    }

诀窍是使用透明的TextBox over 一个TextBlock,可以通过收集许多不同的Run元素来着色。

答案 1 :(得分:1)

此功能不在任何文本控件中。也许你可以通过继承RichTextBox编写自己的自定义控件。

答案 2 :(得分:1)

我认为你最好的选择就是按照Erno的建议寻找第三方控制。

例如:wpfsyntax

  

WPF语法突出显示文本框是用于编辑源代码的非常简单的控件。包含行号,世界突出显示,缩进(制表符,shift + tab ....)等。测试应用程序包含语言IronPython和Boo的解析器。语法Highlight Textbox是用C#开发的。

或者:Fast colored textblox

  

对于我的一个项目,我觉得需要一个带语法高亮的文本编辑器。起初,我使用了从RichTextBox继承的组件,但是当它用于大量文本时,我发现RichTextBox非常缓慢地突出显示大量彩色片段(从200或更多)。当必须以动态方式进行这种突出显示时,会引起严重问题。   
因此我创建了自己的文本组件,既不使用Windows TextBox也不使用RichTextBox。