gpt4 book ai didi

c# - System.Windows.Control.RichTextBox 中的错误

转载 作者:行者123 更新时间:2023-11-30 12:59:58 25 4
gpt4 key购买 nike

我正在 WPF 中创建一个控件,它使用 System.Windows.Control.RichTextBox 显示单位。

问题是 RichTextBox 控件显示纯文本而不是格式化文本。我猜 RichTextBox 控件有一个错误,我不知道该怎么做,因为它取决于计算机。

XAML 代码是,

<RichTextBox x:FieldModifier="private"
x:Name="TxtItem1"
IsReadOnly="True"
IsHitTestVisible="False"
HorizontalContentAlignment="Center"
VerticalContentAlignment="Center" />

后面的部分代码是:

private static void UpdateDocument(RichTextBox control, DependencyPropertyChangedEventArgs e)
{
string content = e.NewValue as string;
control.Document = content.Html1ToFlowDocument();
}

函数 Html1ToFlowDocument 将字符串转换为 FlowDocument。下图是代码运行正常的电脑(Windows 7 64位):

GOES

而下一个不起作用(Windows 7 64 位):

WRONG

另一种方法是使用 RTF 文本,但我遇到了问题。

函数Html1ToFlowDocument的代码,

public static class Html1ToDocument
{
public static FlowDocument Html1ToFlowDocument(this string text)
{
var mcFlowDoc = new FlowDocument();

XmlDocument doc = new XmlDocument();
doc.LoadXml(string.Format("<P>{0}</P>", text));

XmlElement root = doc.GetElementsByTagName("P")[0] as XmlElement;

IEnumerable<Inline> children;
try
{
children = ParseChildren(root);
}
catch (Exception ex)
{
throw new FormatException("Unsupported text.", ex);
}

var paragraph = new Paragraph();
paragraph.Inlines.AddRange(children);

mcFlowDoc.Blocks.Add(paragraph);
return mcFlowDoc;
}

private static IEnumerable<Inline> ParseChildren(XmlElement root)
{
Span sitem;
List<Inline> children;

foreach (XmlNode element in root.ChildNodes)
{
Inline item = null;
if (element is XmlElement)
{
XmlElement xelement = (XmlElement)element;
switch (xelement.Name.ToUpper())
{
case "SUB":
children = ParseChildren(xelement).ToList();
if (children.Count == 1 && children.First() is Run)
{
item = children.First();
item.Typography.Variants = FontVariants.Subscript;
}
else
{
sitem = new Span();
sitem.Typography.Variants = FontVariants.Subscript;
sitem.Inlines.AddRange(children);
item = sitem;
}

break;
case "SUPER":
children = ParseChildren(xelement).ToList();
if (children.Count == 1 && children.First() is Run)
{
item = children.First();
item.Typography.Variants = FontVariants.Superscript;
}
else
{
sitem = new Span();
sitem.Typography.Variants = FontVariants.Superscript;
sitem.Inlines.AddRange(children);
item = sitem;
}
break;
}

yield return item;
}
else if (element is XmlText)
{
item = new Run(element.InnerText);
yield return item;
}
}
}
}

最佳答案

如果两台计算机表面上的大部分内容看起来相同(即操作系统版本、区域设置、安装的框架),那么我敢打赌这是字体问题。在这两种情况下,您基本上得到了相同的文本,但是您遇到了上标和下标的问题。快速一点谷歌搜索显示其他人也有类似的问题:

看起来有问题的字体需要是:

  • 开放式
  • 同时具有上标和下标变体

这里有一些关于检查字体的信息: Detect whether a font supports variants (like superscript and subscript)

我的建议可能是尝试使用不同的字体,看看它是否能修复它,如果是,找出如何确保你在两者上都能获得你需要的字体(意思是,你打算部署到的所有字体) ) 机器。

关于c# - System.Windows.Control.RichTextBox 中的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23287890/

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