我需要一个文本控件,用户可以在其中编辑文本,文本的某些部分可以根据文本使用不同的颜色。基本上,想象一下Visual Studio源文件编辑器或任何其他源文件编辑器,它为源代码着色。 WPF控制的是什么?我所知道的WPF中的三个选项都不合适:
TextBox 不允许使用颜色
TextBlock 不允许用户编辑文字
RichTextBox 允许太多 - 我只想要颜色。
也许RichTextBox可以修复其他文本格式(即字体,粗体,斜体)?有什么想法吗?
答案 0 :(得分:4)
这是一个(非常)粗略的例子,坚持使用TextBox和TextBlock:只是为了好玩,但值得......
这是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#开发的。
对于我的一个项目,我觉得需要一个带语法高亮的文本编辑器。起初,我使用了从RichTextBox继承的组件,但是当它用于大量文本时,我发现RichTextBox非常缓慢地突出显示大量彩色片段(从200或更多)。当必须以动态方式进行这种突出显示时,会引起严重问题。
因此我创建了自己的文本组件,既不使用Windows TextBox也不使用RichTextBox。