具体来说,我希望使用 VS2008ImageLibrary 中包含的 16*16 32 位 png 图像。我试过手动设置图像的高度和宽度属性,调整边距和填充,调整拉伸和渲染选项。我创建工具栏按钮的尝试都导致缩放不当(图标模糊)、图标上的底行像素被截断或工具栏按钮的大小不正确——更不用说这里已经提到的消失的图标了。有没有人找到制作在 WPF 中正确显示的标准 VisualStudio/WinForms 样式工具栏按钮的最佳方法?
4 回答
首先,将图像分辨率更改为 96DPI,这可以使用免费的 Paint.net ( http://www.getpaint.net ) 打开文件,从菜单中选择 Image->Canvas Size 并将“分辨率”调整为96和储蓄。
如果这对您没有帮助,您可以使用我在博客中写的解决方案http://www.nbdtech.com/blog/archive/2008/11/20/blurred-images-in-wpf.aspx
最好的方法是使用矢量图形而不是 png。我知道以下内容并不完全符合您的要求,但恕我直言,没有更好看的图标。它还可以帮助您摆脱边距和填充。(好吧,如果你想用照片你就完蛋了)
坏消息是您可能需要重新绘制所有图标。您可以使用 MS Expression Blend(它能够将绘制的图像保存为 .xaml)来执行此操作,或者您可以使用文本编辑器自己制作它们。我更喜欢 Border.Background 而不是 Image.Source 来放置图标,这允许我将文本放在图像上。这看起来像这样:
<Window.Resources>
<ResourceDictionary Source="Resources/Icons.xaml"/>
</Window.Resources>
<!--
...
-->
<Button>
<Border Background="{StaticResource IconName}" Height="16" Width="16" />
</Button>
我能想到的最好的解决方法是:
<Image x:Key="TB_NewIcon" Source="Toolbar Images/NewDocumentHS.png" Height="16" Width="16" SnapsToDevicePixels="True" RenderOptions.BitmapScalingMode="NearestNeighbor"/>
...
<Button Command="ApplicationCommands.New" Content="{StaticResource TB_NewIcon}" Padding="2,2,2,1"/>
或者:
<BitmapImage x:Key="TB_NewIcon" UriSource="Toolbar Images\NewDocumentHS.png"/>
...
<Button Command="ApplicationCommands.New" Padding="2,2,2,1">
<Image Source="{StaticResource TB_NewIcon}" Height="16" Width="16" SnapsToDevicePixels="True" RenderOptions.BitmapScalingMode="NearestNeighbor"/>
</Button>
对于 Button Tag,需要 Padding 属性来确保图像不会在 15 像素的高度处被截断,并且按钮不会调整大小以适应图像。或者,我们可以指定 Padding="1",但是我们必须手动设置 Height="21" 和 Width="22" 以确保按钮不会调整大小以适应图像
在图像选项卡上,高度和宽度是需要确保图像不被拉伸。SnapsToDevicePixels 和 RenderOptions.BitMapScalingMode 都需要确保没有模糊。我不能保证这适用于所有分辨率。
注意:对于引起最多问题的 NewDocumentHS.png 图标,由于它占据了整整 16 个像素的高度,您可能需要将填充调整为“1,1,3,2”,以便底部与其他图标更正确地对齐。
您可能需要考虑尝试WPF4中现在可用的新属性。RenderOptions.BitmapScalingMode
将其留给HighQuality或只是不声明它。
在您的根元素(即您的主窗口)上添加此属性:UseLayoutRounding="True"
.
以前仅在 Silverlight 中可用的属性现在已修复所有位图大小问题。:)
请注意 -布局舍入可能对精确布局产生一些影响:
元素的宽度和/或高度最多可以增长或缩小 1 个像素
物体的放置最多可以移动 1 个像素
居中的元素可以垂直或水平偏离中心最多 1 个像素
在这里找到更多信息:http: //blogs.msdn.com/text/archive/2009/08/27/layout-rounding.aspx