4

具体来说,我希望使用 VS2008ImageLibrary 中包含的 16*16 32 位 png 图像。我试过手动设置图像的高度和宽度属性,调整边距和填充,调整拉伸和渲染选项。我创建工具栏按钮的尝试都导致缩放不当(图标模糊)、图标上的底行像素被截断或工具栏按钮的大小不正确——更不用说这里已经提到的消失的图标了。有没有人找到制作在 WPF 中正确显示的标准 VisualStudio/WinForms 样式工具栏按钮的最佳方法?

4

4 回答 4

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

于 2009-03-29T07:43:11.147 回答
3

最好的方法是使用矢量图形而不是 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>
于 2009-03-28T19:55:40.087 回答
1

我能想到的最好的解决方法是:

<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”,以便底部与其他图标更正确地对齐。

于 2009-03-28T17:02:20.720 回答
1

您可能需要考虑尝试WPF4中现在可用的新属性。RenderOptions.BitmapScalingMode将其留给HighQuality或只是不声明它。

在您的根元素(即您的主窗口)上添加此属性:UseLayoutRounding="True".

以前仅在 Silverlight 中可用的属性现在已修复所有位图大小问题。:)

请注意 -布局舍入可能对精确布局产生一些影响:

  • 元素的宽度和/或高度最多可以增长或缩小 1 个像素

  • 物体的放置最多可以移动 1 个像素

  • 居中的元素可以垂直或水平偏离中心最多 1 个像素

在这里找到更多信息:http: //blogs.msdn.com/text/archive/2009/08/27/layout-rounding.aspx

于 2010-04-29T02:19:23.800 回答