Wpf 当使用自定义玻璃放置在窗口中时,FlowDocument在子元素中丢失ClearType

Wpf 当使用自定义玻璃放置在窗口中时,FlowDocument在子元素中丢失ClearType,wpf,flowdocument,cleartype,Wpf,Flowdocument,Cleartype,因此,新的WPF 4文本渲染看起来很棒,但是在窗口上启用aero glass效果需要将背景更改为透明,这当然会禁用ClearType渲染 使用提供的RenderOptions.ClearTypeHint=Enabled允许您指定子元素,以便从树中的该点重新启用ClearType渲染。我还发现了一些其他主题,这些主题讨论了如何为RichTextBox和FlowDocumentScrollViewer内部使用的ScrollViewer执行此操作,创建自定义样式确实解决了这一问题,从而使我的FlowD

因此,新的WPF 4文本渲染看起来很棒,但是在窗口上启用aero glass效果需要将背景更改为透明,这当然会禁用ClearType渲染

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

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

我用Snoop查看了可视化树,但是主内容(正确渲染)和子内容(灰度)都有类似的元素层次结构,没有任何可以附加RenderOpions.ClearTypeHint的内容


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

我知道这可能会变得乏味,但您是否尝试过这样设置常规样式:

    <Style TargetType="Paragraph">
        <Setter Property="RenderOptions.ClearTypeHint" Value="Enabled"/>
    </Style>

在做了大量的研究,比较了不同控制装置在aero玻璃上和下的工作方式后,我找到了一些答案。TextBox控件也不能正常工作,但FlowDocument和TextBlock之类的部分都能正常工作,这促使我探究原因

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

不过,我确实偶然发现了一件新的作品。如果您有权访问DrawingContext,并且正在自己进行低级文本渲染,则可以在文本后面填充DrawRectangle,然后重新启用ClearType。我假设这是渲染器确保其具有适当背景的唯一方法


总之,您需要自己绘制文本,此外,您还需要在文本后面使用相同的绘图上下文显式绘制背景,以便ClearType能够正确渲染。

这不起作用。内部流文档呈现器忽略该属性。因此,您仍然没有找到更好的方法来执行此操作?我对这个有点迷茫,你接受的解决方案似乎很麻烦。