我有一个WPF应用程序,可以在Aero玻璃背景上绘制文本。问题在于,根据我的应用程序背后显示的内容,在玻璃背景上绘制的文本可能变得难以阅读而无法阅读。
正如您在以下屏幕截图中看到的那样,如果窗口保存,撤消和重做文本块变得难以阅读>背后我的申请很黑。
现在,Microsoft等应用程序(例如Word)会在文本背后出现一种模糊现象,您可以在下一个屏幕截图中看到:
我听说我可以使用某种Win32 API调用来实现这一点。但是,就此而言,这只是传闻,我没有事实可以支持。
我尝试了一些不同的WPF特定的东西来估算Word的作用:
TextBlock
)这些都没有给我可用的结果,它们看起来都很糟糕。有没有人知道任何方法,WPF或Win32,我可以像微软在玻璃上那样绘制文字(即。,可读)?
答案 0 :(得分: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>
此代码具有加倍文本和模糊更远的文本版本的效果,Z-index明智。对我来说就像是一种魅力。
有一点需要注意:
如果文本颜色为白色且模糊颜色为黑色,则这似乎效果最佳。反过来看起来并不那么好。好消息是,无论您的Aero Glass窗口背后是什么,它看起来都很好。
答案 1 :(得分:3)
您要搜索的Win32函数是DrawThemeTextEx。它有一个标志,允许您在背景中绘制带有白色光晕/模糊的文本。 您可以在此处找到示例:C# Transparent GUI
答案 2 :(得分:3)
如果有人在寻找另一个例子,试试这个包括对非玻璃的后向支持:
用法:
Style="{StaticResource glassText}"
进入资源词典:
<Style TargetType="TextBlock" x:Key="glassText">
<Setter Property="Foreground" Value="Black" />
<Style.Triggers>
<Trigger Property="Foreground" Value="Black">
<Setter Property="Effect">
<Setter.Value>
<DropShadowEffect Color="White" BlurRadius="10" RenderingBias="Performance" ShadowDepth="0" Direction="0" />
</Setter.Value>
</Setter>
</Trigger>
</Style.Triggers>
</Style>
<Style TargetType="TextBlock" x:Key="glassLink" BasedOn="{StaticResource glassText}">
<Setter Property="Foreground" Value="#FF0066CC" />
<Style.Triggers>
<Trigger Property="IsMouseOver" Value="True">
<Setter Property="Cursor" Value="Hand" />
<Setter Property="TextDecorations" Value="Underline" />
</Trigger>
<Trigger Property="IsEnabled" Value="False">
<Setter Property="Foreground" Value="{x:Static SystemColors.GrayTextBrush}" />
</Trigger>
</Style.Triggers>
</Style>