我的 WPF 应用程序中有一个菜单,它使用 PNG 图像作为图标。这些图像作为资源存储在单独的 DLL 中。在旧版本的 Windows 中,图标(48x48 像素)正确显示,缩小到容器的大小。
在 Windows 8 中,图标的行为有所不同。
这是我的代码示例:
<MenuItem Header="Promotions" x:Name="mnuPromotions" Style="{StaticResource styMenuItem}">
<MenuItem.Icon>
<Image Source="{StaticResource icnPromotion_48}" Style="{StaticResource styMenuIcon}" />
</MenuItem.Icon>
</MenuItem>
<MenuItem Header="Catalogues" x:Name="mnuCatalogues" Style="{StaticResource styMenuItem}">
<MenuItem.Icon>
<Image Source="{StaticResource icnCatalogue_48}" Style="{StaticResource styMenuIcon}" />
</MenuItem.Icon>
</MenuItem>
<MenuItem Header="Customer Price Lists" x:Name="mnuCustomerPriceLists">
<MenuItem.Icon>
<Image Source="{StaticResource icnCashCustomer_48}" Style="{StaticResource styMenuIcon}" />
</MenuItem.Icon>
</MenuItem>
这是菜单项的样式
<Style x:Key="styMenuItem" TargetType="MenuItem">
<Setter Property="Foreground" Value="#FF000000" />
<Setter Property="FontSize" Value="22" />
<Setter Property="Margin" Value="2" />
<Setter Property="Background">
<Setter.Value>
<LinearGradientBrush EndPoint="0.5,1" StartPoint="0.5,0">
<GradientStop Offset="0" Color="#AA9D9D9D" />
<GradientStop Offset="1" Color="#AACFCDBE" />
</LinearGradientBrush>
</Setter.Value>
</Setter>
</Style>
这是图标的风格
<Style x:Key="styMenuIcon" TargetType="Image">
<Setter Property="Width" Value="20" />
<Setter Property="Height" Value="20" />
<Setter Property="VerticalAlignment" Value="Center" />
<Setter Property="HorizontalAlignment" Value="Center" />
<Setter Property="Margin" Value="2" />
</Style>
这是旧版本 Windows 中菜单的外观:
这就是菜单在 Windows 8 中的样子
如果您仔细观察,这些图标在 Win8 中居中并被裁剪,而在旧版本的 Windows 中它们适合容器。
有谁知道为什么这种行为会发生变化,以及是否有一个简单的解决方法来解决这种行为变化,以便菜单与从 XP 到 8 的所有 Windows 版本完全兼容?