gpt4 book ai didi

wpf - FlowDocument 放置在带有自定义玻璃的窗口中时,子元素中的 ClearType 丢失

转载 作者:行者123 更新时间:2023-12-05 00:03:56 29 4
gpt4 key购买 nike

所以新的 WPF 4 文本渲染看起来很棒,但是在窗口上启用毛玻璃效果需要您将背景更改为透明,这当然会禁用 ClearType 渲染。

使用提供的 RenderOptions.ClearTypeHint=Enabled 允许您指定子元素以从树中的那个点重新启用 ClearType 渲染。我发现了一些其他主题,这些主题讨论了为 RichTextBox 和 FlowDocumentScrollViewer 内部使用的 ScrollViewer 执行此操作,并且创建自定义样式确实可以修复它,以便我的 FlowDocument 再次获得 ClearType 渲染。

但是,这仅适用于 FlowDocument 中的顶级段落。如果我添加 float 内容或图形或表格,其中的任何文本都会再次出现莫名其妙的灰度。我知道玻璃效果是罪魁祸首,因为禁用它会重新启用 ClearType 渲染。

我用 Snoop 查看了可视化树,但主要内容(正确呈现)和子内容(灰度)具有相似的元素层次结构,但没有任何可以附加 RenderOptions.ClearTypeHint 的内容。

有没有人遇到过这个问题?有解决方法或解决方案吗?我检查了连接,但没有关于此的任何错误。这是一个很烦人的问题。

最佳答案

在做了更多的研究,并比较了不同控制在气动玻璃上和关闭时的工作方式之后,我找到了一些答案。 TextBox 控件也不能正常工作,但 FlowDocument 的某些部分和 TextBlock 之类的东西可以正常工作,这促使我探索原因。

在反射器中挖掘了一段时间后,我发现当使用高级文本格式 API 获取文本并将其渲染到绘图上下文时,RenderOption 标志基本上被忽略了,因为绘图系统从根视觉(窗口)知道启用了透明度。一旦发生这种情况,世界上的所有 RenderOptions 标志都不会恢复 ClearType。

不过,我确实偶然发现了一个变通方法。如果您有权访问 DrawingContext 并自己进行低级文本渲染,则可以在文本后面使用填充执行 DrawRectangle,并重新启用 ClearType。我认为这是渲染器确保它有适当的背景可以绘制的唯一方法。

因此,总而言之,您需要进行自己的文本绘制,此外,您还需要在文本后面使用相同的 DrawingContext 显式绘制背景,以便 ClearType 正确呈现。

关于wpf - FlowDocument 放置在带有自定义玻璃的窗口中时,子元素中的 ClearType 丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5228311/

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