Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# WPF按钮上的Dropshadow会导致文本模糊_C#_Wpf_Dropshadow - Fatal编程技术网

C# WPF按钮上的Dropshadow会导致文本模糊

C# WPF按钮上的Dropshadow会导致文本模糊,c#,wpf,dropshadow,C#,Wpf,Dropshadow,这有点让我发疯。向按钮添加DropShadowEffect。在IDE中,它如下所示: 第二个按钮用于参考,无DropShadowEffect。正如你所看到的,接下来没有什么不同。然后我构建项目,当它运行时,它看起来如下所示: 是什么导致了这种变化?以下是两个按钮的XAML: <Button Name="clearButton" Content="Clear" Click="clearButton_Click" Margin="5,0,5,0" MaxWidth="80" MinHeig

这有点让我发疯。向按钮添加
DropShadowEffect
。在IDE中,它如下所示:

第二个按钮用于参考,无
DropShadowEffect
。正如你所看到的,接下来没有什么不同。然后我构建项目,当它运行时,它看起来如下所示:

是什么导致了这种变化?以下是两个按钮的XAML:

<Button Name="clearButton" Content="Clear" Click="clearButton_Click" Margin="5,0,5,0" MaxWidth="80" MinHeight="40" 
    TextOptions.TextFormattingMode="Display">
<Button.Effect>
    <DropShadowEffect BlurRadius="5" ShadowDepth="3" />
</Button.Effect>
</Button>
<Button Content="Clear" Margin="5,5,5,0" MaxWidth="80" MinHeight="40"  TextOptions.TextFormattingMode="Display" />

编辑: 使用@gretro确实会让它看起来更好,但它仍然不正确:

然而,在IDE中,它再次看起来很好:


删除附加属性
TextOptions.textformatingmode=“Display”
。这就是导致按钮模糊的原因

<Button Grid.Row="25" Grid.Column="0" Content="Clear">
    <Button.Effect>
       <DropShadowEffect BlurRadius="5" ShadowDepth="3" />
    </Button.Effect>
</Button>


此XAML在按钮中渲染水晶般清晰的文本,并为我提供阴影效果。

您的整个按钮都在跨像素边界上渲染。请注意,1点边界实际上跨越多个像素,从而产生模糊效果


尝试在父元素或祖先元素上设置
UseLayoutRounding=“True”
。树越高越好(视图的根视觉效果就越理想)。您也可以尝试
SnapsToDevicePixels=“True”

我使用Snoop检查了效果,以查看显示内容的“TextBlock”中是否继承了该效果,但事实并非如此。这意味着此模糊可能来自继承的样式。安装Snoop,您将立即知道。如果没有什么是决定性的,试着消除你的阴影效果,看看它是否是导致错误的原因。PS:IDE看起来更好是正常的。为了减少内存消耗,VS渲染UIElement,让您了解它的外观。虽然您的soln没有帮到我,但我发现它确实帮了我:如果它仍然不工作,请将
UseLayoutRounding
向上移动一个“级别”。我在
DataGrid
中有一个模糊图像,并将
UseLayoutRounding
从图像移动到DataGrid。现在清楚了:-)