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でのメニューの外観です。
そして、これはメニューがWindows8のように見えるということです
よく見ると、アイコンはWin8の中央に配置されてトリミングされていますが、古いバージョンのWindowsではコンテナ内に収まっています。
メニューがXPから8までのすべてのバージョンのWindowsと完全に互換性を持つように、この動作が変更される理由と、この動作の変更に対する簡単な回避策があるかどうかを誰かが知っていますか?