gpt4 book ai didi

仅带颜色的 WPF 文本控件

转载 作者:行者123 更新时间:2023-12-05 08:57:32 28 4
gpt4 key购买 nike

我需要一个文本控件,用户可以在其中编辑文本,并且文本的某些部分可以根据文本具有不同的颜色。基本上,想象一下 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com