WPF字体模糊问题-解决方案
以下链接描述并演示了问题:WPF字体模糊问题-解决方案,wpf,fonts,Wpf,Fonts,以下链接描述并演示了问题: 说明:。此链接具有字体比较功能 我想收集这个问题所有可能的解决方案。Microsoft Expression Blend使用WPF,但字体看起来可读 Microsoft Expression Blend中的深色背景 增加字体大小并更改字体(Calibri…) 嵌入windows窗体 使用GDI+和/或Windows Forms TextRenderer类将文本渲染为位图,然后将该位图渲染为WPF控件 还有其他解决办法吗 看来问题终于解决了 他们说“Sn
- Microsoft Expression Blend中的深色背景
- 增加字体大小并更改字体(Calibri…)
- 嵌入windows窗体
- 使用GDI+和/或Windows Forms TextRenderer类将文本渲染为位图,然后将该位图渲染为WPF控件李>
- ClearType级别:子像素暗示的数量
- 伽马能级
- 像素结构:显示像素中色条的排列方式
- 文本对比度级别:调整字形词干的宽度,使字体更重
这对每个设计师来说应该足够了。SnapToDevicePixels只适用于WPF形状(线条等),而不适用于文本渲染器 这个问题没有已知的解决方法。根据微软的说法,这种行为是“故意的”
也可以看到微软论坛上讨论这些问题的帖子——它已经收到了一些来自MS guys的回复,澄清了他们在这个问题上的立场。从开发人员的角度来看,迄今为止唯一已知的“解决方法”是使用GDI+和/或Windows Forms TextRenderer类将文本渲染为位图,然后将该位图渲染为WPF控件。除了明显的性能影响之外,这并不能缓解现有应用程序的问题 我现在已经创建了一个(令我惊讶的是,尽管存在所有负面影响,但在指定的跟踪器中没有实际的bug报告)
由于这是向微软传达请求和问题的官方渠道之一,我建议也通过它来获得更快的答案。至少,如果您希望以这样或那样的方式解决该问题,在那里投票和/或验证该问题将有助于引起Microsoft PM和工程师对该问题的注意,并可能提高其感知优先级。刚刚试用了VS2010 beta,这都是在WPF中完成的,而且它还受到字体模糊问题的严重影响。特别是在工具提示上
这似乎提供了一些证据,证明WPF4实际上并不能解决这个问题(如果它看起来更糟的话)哇,我真不敢相信我终于让我的WPF字体可读了。我也不敢相信没有选项对话框可以使这些更改变得容易,而默认值在我的显示器上却很糟糕 这些(十进制)对我很有用,并且最接近我的常规cleartype字体:
- ClearTypeLevel:10(主要是灰度混叠)
- GammaLevel:1300(较高的gamma使字体太薄,我看到了别名中的颜色)
- 这将在VS2010(和WPF4)beta 2中修复:
前几天,当我使用带有应用程序的边框时,遇到了一个问题。结果是,该边界内的所有文本都非常模糊。不管文本是在其他面板内还是直接在边框下,任何作为父对象的子对象的文本块都会受到影响 这种特殊情况的解决方案是,不要将内容放在具有效果的边框内,而是使用网格(或任何其他支持将内容放在彼此顶部的内容)并将矩形放置在与文本相同的单元格中(即,作为视觉树中的同级),并将效果放在该单元格上 像这样:
<!-- don't do this --->
<Border>
<Border.Effect>
<DropShadowEffect BlurRadius="25" ShadowDepth="0" Opacity="1"/>
</Border.Effect>
<TextBlock Text="This Text Will Be Blurry" />
</Border>
<!-- Do this instead -->
<Grid>
<Rectangle>
<Rectangle.Effect>
<DropShadowEffect BlurRadius="25" ShadowDepth="0" Opacity="1"/>
</Rectangle.Effect>
</Rectangle>
<TextBlock Text="This Text Will Be Crisp and Clear" />
</Grid>
.NET4终于找到了解决WPF糟糕的文本呈现质量的方法,但它隐藏得很好。为每个窗口设置以下内容:
TextOptions.TextFormattingMode="Display"
默认值为“理想”,与名称完全不同
TextOptions中还有两个其他选项,即TextHintingMode和TextRenderingMode,但它们都有合理的默认值。我不认为这是一个bug,但默认配置确实非常麻烦
TextOptions.TextRenderingMode
TextOptions.TextFormattingMode
RenderOptions.ClearTypeHint
TextOptions.TextRenderingMode="Auto"
TextOptions.TextFormattingMode="Ideal"
RenderOptions.ClearTypeHint="Auto"
public class SnappyWindow : Window
{
public SnappyWindow()
{
SetValue(TextOptions.TextFormattingModeProperty, TextFormattingMode.Display);
}
}