gpt4 book ai didi

wpf - 如何在不修改以前的文本的情况下更改 WPF RichTextBox 中的 FontFamily

转载 作者:行者123 更新时间:2023-12-02 00:32:13 27 4
gpt4 key购买 nike

当您使用 RichTextBox 的 FontFamily 属性时,它会更改 FlowDocument 中整个内容的 FontFamily。与执行 EditingCommands.ToggleBold 之类的命令的方式相同,它只更改插入符号下的单词或仅更改要写入的新文本,应该有一种方法可以对 FontsFamilies 和 Color 执行相同的操作。

最佳答案

也许不是最简洁的解决方案,但您可以从 RichTextBox 继承并添加一些行为

声明您自己的字体属性,以便您稍后可以将它们与字体列表绑定(bind)

    public class CustomControl1 : RichTextBox
{

public static readonly DependencyProperty CurrentFontFamilyProperty =
DependencyProperty.Register("CurrentFontFamily", typeof(FontFamily), typeof (CustomControl1), new FrameworkPropertyMetadata(new FontFamily("Tahoma"), FrameworkPropertyMetadataOptions.BindsTwoWayByDefault,new PropertyChangedCallback(OnCurrentFontChanged)));
}

重写 OnTextInput。您不能在 RichTextBox 上订阅此事件,它内置了对 KeyDown 和 KeyUp 冒泡的处理,并且在它们之间生成了 TextInput

    protected override void OnTextInput(TextCompositionEventArgs e)
{
if (fontchanged)
{
TextPointer tp = this.CaretPosition.GetInsertionPosition(LogicalDirection.Forward);
Run r = new Run(e.Text, tp);
r.FontFamily = CurrentFontFamily;
r.Foreground = CurrentForeground;
this.CaretPosition = r.ElementEnd;
fontchanged = false;
}
else
base.OnTextInput(e);
}

如果您的 CurrentFontProperty 已更改,请获取插入符位置并使用新的文本输入创建新的运行并设置 FontFamily = CurrentFontFamily。如果 carret 在一个词上,你也可以改变整个词,这篇文章可能对发现这个词很有趣 Navigate Words in RichTextBox .

关于wpf - 如何在不修改以前的文本的情况下更改 WPF RichTextBox 中的 FontFamily,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1143585/

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