C# 如何在WPF文本框中显示Unicode控制字符?

C# 如何在WPF文本框中显示Unicode控制字符?,c#,wpf,unicode,fonts,non-printing-characters,C#,Wpf,Unicode,Fonts,Non Printing Characters,我的用户做了很多双向文本编辑,他们在文本上撒上一些和/或标记并不少见。有时,他们希望看到这些标记在文本中的位置,以便移动或删除它们。 Windows窗体中的TextBox控件提供了一个默认上下文菜单,其中包含一些与Unicode相关的条目,其中一个是 启用此选项将强制控件为这些不可打印字符绘制在相应字体中定义的图示符 例如,如果我将TextBox控件的Text属性设置为“Hello\u200E World!”并启用此选项,我将获得(使用的字体是Segoe UI) 如果我们在字体编辑软件(我使用的

我的用户做了很多双向文本编辑,他们在文本上撒上一些和/或标记并不少见。有时,他们希望看到这些标记在文本中的位置,以便移动或删除它们。
Windows窗体中的
TextBox
控件提供了一个默认上下文菜单,其中包含一些与Unicode相关的条目,其中一个是

启用此选项将强制控件为这些不可打印字符绘制在相应字体中定义的图示符

例如,如果我将
TextBox
控件的
Text
属性设置为
“Hello\u200E World!”
并启用此选项,我将获得(使用的字体是Segoe UI)

如果我们在字体编辑软件(我使用的是FontForge)中打开Segoe UI字体,我们可以看到确实存在为和代码点定义的字形

我还发现枚举可以用来控制这些字符在GDI+中的呈现方式,特别是通过向
StringFormat
对象提供
DisplayFormatControl
标志:

private void Form_Paint(object sender, PaintEventArgs e)
{
    var text = "Hello \u200E World!";
    var g = e.Graphics;

    // Will draw LRM symbol with its representative glyph
    var fmt = new StringFormat(StringFormatFlags.DisplayFormatControl);
    g.DrawString(text, Font, Brushes.Black, 10, 10, fmt);
}
但是,我在WPF TextBox或RichTextBox控件中没有发现任何类似的内容:默认上下文菜单仅提供复制、剪切和粘贴命令,并且所有控件属性(包括附加属性)似乎都不支持使用字体定义的字形绘制控件字符


有没有一种方法可以在WPF TextBox或RichTextBox中使用Unicode控件字符的代表性标志符号绘制Unicode控件字符,而无需借助各种技巧,例如用转换器中的其他字符替换这些字符?

WPF文本控件显然不支持这一点。将WindowsFormsHost添加到您的窗口并编写如下代码:
var tBox=new System.Windows.Forms.TextBox{Text=“Hello\u200E World!”;formsHost.Child=tBox?@LocEngineer使用WindowsFormsHost是我的“计划B”,如果绝对没有办法使用本机WPF控件实现它的话。我不只是切换到winforms主机的主要原因是控件看起来很难看,而且我不太擅长设置winforms控件的主题。我仍然希望有人遇到同样的问题,并想出一个好办法来实现这个选项。它说WPF文本处理在各个方面都比WinForms有所改进,所以也许还有希望!)