如何使Aero玻璃背景上的WPF文本可读?

Rob*_*Rob 10 wpf text .net-3.5

我有一个WPF应用程序,可以在Aero玻璃背景上绘制文本.问题在于,根据我的应用程序背后显示的内容,在玻璃背景上绘制的文本可能变得难以阅读而无法阅读.

正如您在下面的屏幕截图中看到的,如果应用程序后面的窗口很暗,则保存,撤消重做文本块变得难以阅读.

替代文字

现在,Microsoft等应用程序(例如Word)通过文本背后的模糊解决了这个问题,您可以在下一个屏幕截图中看到:

替代文字

我听说我可以使用某种Win32 API调用来实现这一点.但是,就此而言,这只是传闻,我没有事实要支持这一点.


我尝试了一些不同的WPF特定的东西来估计Word的作用:

  • 在文本上删除阴影
  • 带有模糊的文本的透明图像(而不是a TextBlock)

这些都没有给我可用的结果,它们看起来都很糟糕.有谁知道的任何方法,WPF或Win32的,那我可以用它来绘制文本微软确实在玻璃上(的方式,即,可读)?

the*_*ix1 8

我能够在没有Win32的情况下解决这个问题(需要.NET 3.5).

 <Grid>
     <TextBlock Foreground="Black" HorizontalAlignment="Center" Margin="0,10,30,0" Text="Text that should be visible on Aero Glass">
         <TextBlock.Effect>
            <BlurEffect Radius="15" KernelType="Gaussian">                                                                    
            </BlurEffect>                                        
         </TextBlock.Effect>
      </TextBlock>
      <TextBlock HorizontalAlignment="Center" Foreground="White" Margin="0,10,30,0" Text="Text that should be visible on Aero Glass">
      </TextBlock>
 </Grid>
Run Code Online (Sandbox Code Playgroud)

此代码具有加倍文本和模糊更远的文本版本的效果,Z-index明智.对我来说就像一个魅力.

有一点需要注意:
如果文本颜色为白色且模糊颜色为黑色,这似乎效果最佳.反过来看起来并不那么好.好消息是,无论您的Aero Glass窗口背后是什么,它看起来都很好.