仅带颜色的 WPF 文本控件

标签 wpf colors textbox richtextbox

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

TextBox 不允许颜色

TextBlock 不允许用户编辑文本

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

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

最佳答案

这是一个(非常)粗略的例子,坚持使用 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);
            }
        }
    }

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

关于仅带颜色的 WPF 文本控件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30702527/

相关文章:

android - Android 背景中的颜色 "flowing"

Python:Tkinter:如何更改窗口边框颜色?

c# - 如何在 ItemCommand 事件后获取 TextBox 的 Text 属性

c# - observablecollection 到 dataView 或 dataset

c# - 停止特定元素的 Storyboard动画

colors - 如何在gnuplot中设置标签和线条相同的颜色

c# - 00 :00 Time Format > 24 的正则表达式

wpf - 聚焦时清除文本框

wpf - 将 ContextMenu 项动态绑定(bind)到静态定义的 MenuItems

c# - 在 CellTemplate 中为 ListView 创建触发器? (一般与模板混淆)