gpt4 book ai didi

wpf - Windows 8 中 WPF 菜单项图标行为的解决方法

转载 作者:行者123 更新时间:2023-12-04 05:12:29 25 4
gpt4 key购买 nike

我的 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 中的菜单:
Menu in Windows XP to Windows 7

这是菜单在 Windows 8 中的样子
Menu in Windows 8

如果仔细观察,这些图标在 Win8 中居中并被裁剪,而它们适合旧版 Windows 中的容器。

有谁知道为什么这种行为会发生变化,以及是否有针对这种行为变化的简单解决方法,以便菜单与从 XP 到 8 的所有 Windows 版本完全兼容?

最佳答案

看起来这种行为是一个已知的错误,(像往常一样)Microsof 不想修复:

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

发布了两种解决方法,简单的一种是将图像高度调整为每个 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>

关于wpf - Windows 8 中 WPF 菜单项图标行为的解决方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14727770/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com