2

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でのメニューの外観です。 WindowsXPからWindows7のメニュー

そして、これはメニューがWindows8のように見えるということです Windows8のメニュー

よく見ると、アイコンはWin8の中央に配置されてトリミングされていますが、古いバージョンのWindowsではコンテナ内に収まっています。

メニューがXPから8までのすべてのバージョンのWindowsと完全に互換性を持つように、この動作が変更される理由と、この動作の変更に対する簡単な回避策があるかどうかを誰かが知っていますか?

4

2 に答える 2

2

この動作は既知のバグのようで、(いつものように) Microsof は修正を望んでいません。

http://connect.microsoft.com/VisualStudio/feedback/details/767328/menuitem-icon-wont-stretch-when-ching-size-in-windows-8

投稿された 2 つの回避策があります。単純なものは、XAML ごとに画像の高さをメニュー項目の高さに調整することです。

<MenuItem x:Name="ctxMenuName" Header="Open Existing">
  <MenuItem.Icon>
     <Image Source="/MyApp;component/Images/folder_with_file.png"
                 Height="{Binding Path=ActualHeight, ElementName=ctxMenuName}"
                 Width="{Binding Path=ActualHeight, ElementName=ctxMenuName}" />
  </MenuItem.Icon>
</MenuItem> 
于 2014-02-18T08:18:28.663 に答える