这是我的按钮模板
<Microsoft_Windows_Themes:ButtonChrome
x:Name="Chrome"
Background="{TemplateBinding Background}"
BorderBrush="{TemplateBinding BorderBrush}"
RenderDefaulted="{TemplateBinding IsDefaulted}"
RenderMouseOver="{TemplateBinding IsMouseOver}"
RenderPressed="{TemplateBinding IsPressed}">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="Auto"/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Image
Source="{TemplateBinding ImageSource}"
RenderOptions.BitmapScalingMode="NearestNeighbor"
SnapsToDevicePixels="True"
HorizontalAlignment="Center"
VerticalAlignment="Center"
Stretch="None"
/>
<ContentPresenter
Grid.Column="1"
HorizontalAlignment="{TemplateBinding HorizontalContentAlignment}"
Margin="{TemplateBinding Padding}"
VerticalAlignment="{TemplateBinding VerticalContentAlignment}"
SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}"
RecognizesAccessKey="True"/>
</Grid>
</Microsoft_Windows_Themes:ButtonChrome>
现在你可以看到这个问题My Images are blurry on StackOverflow我试过了..
RenderOptions.BitmapScalingMode="NearestNeighbor"
在所有级别,网格,chrome ..并尝试了SnapsToDevicePixels的各种组合,但图像不会正确显示。我设置Stretch = None,图像在中心对齐,还为什么它会自动拉伸?
这是输出,非常令人沮丧。
Bad Image on WPF http://akashkava.com/blog/wp-content/uploads/2009/12/BadButton.PNG
图像的实际尺寸是16x16,但我通过使用Windows Maginifier计算出来,无论我做什么,图像实际上都尝试渲染为20x20,对于更大的图像,它甚至裁剪最右边和底部。我认为当Stretch = None时,图像应该正确渲染16x16,有人能澄清这里的问题吗?
答案 0 :(得分:1)
尝试在图像元素上设置明确的宽度和高度。
答案 1 :(得分:1)
这是一个已知的wpf问题,微软尚未修复。唯一的解决方法是调整大小,使其不会以像素部分的大小结束。
答案 2 :(得分:1)
调整图像大小即可。
答案 3 :(得分:1)
我创建了一个按钮样式,并重写了控件模板,为其提供了自定义高度。
您可能需要考虑尝试在WPF4中使用的新属性。将RenderOptions.BitmapScalingMode
保留为 HighQuality ,或者不要声明它。
在您的根元素(即您的主窗口)上添加以下属性:UseLayoutRounding="True"
。
以前只在Silverlight中可用的属性现在修复了所有Bitmap大小调整问题。 :)
请注意 - 一些效果布局四舍五入 可以有精确的布局:
元素的宽度和/或高度最多可增大或缩小1个像素
对象的放置最多可以移动1个像素
中心元素最多可以垂直或水平偏离中心 1像素
更多信息,请访问:http://blogs.msdn.com/text/archive/2009/08/27/layout-rounding.aspx
答案 4 :(得分:1)
如果您认为您的图像是16x16,但WPF似乎认为它是20x20,那么您可能在图像中遇到了DPI问题。你的形象是PNG吗?将其另存为jpg,看看它看起来如何。
参考:http://www.hanselman.com/blog/BeAwareOfDPIWithImagePNGsInWPFImagesScaleWeirdOrAreBlurry.aspx