所以我有一个 MenuItem (在 ContextMenu 中,如果它确实有影响,我不认为它有影响)。我想使用 MenuItem.Icon 属性在 MenuItem 中显示图标。下面是执行此操作的 XAML 代码:
<MenuItem Header="MenuItem1">
<MenuItem.Icon>
<Image Source="[pathtoimage]"/>
</MenuItem.Icon>
</MenuItem>
这有效。但是如果我想用 Height 和 Width 指定图标的大小怎么办?在网络上搜索显示它应该是 32,有人说它应该是 20。20 最适合我,但我不想硬编码 20。我想将其设置为与 MenuItem 相同的高度,因为事实上,在不同的分辨率下,实际高度可能会有所不同。所以,我尝试了以下方法:
<MenuItem x:Name="menuItem1" Header="MenuItem1">
<MenuItem.Icon>
<Image Source="[pathtoimage]"
Height="{Binding Path=ActualHeight, ElementName=menuItem1}"
Width="{Binding Path=ActualHeight, ElementName=menuItem1}"
</MenuItem.Icon>
</MenuItem>
您可能认为它应该有效,但事实并非如此。问题是为什么?如果我将宽度和高度都设置为 20,我就能得到我想要的外观。但是如果系统字体大小发生变化,那么 20x20 将不再是理想的。在 XAML 中执行此操作是理想的选择,因为我确信在代码隐藏中有很多方法可以处理此问题。
图标大小和图标区域宽度在 MenuItem 模板和样式中硬编码,如下所示。
<ContentPresenter x:Name="Icon" Content="{TemplateBinding Icon}" ContentSource="Icon" HorizontalAlignment="Center" Height="16" Margin="3" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="Center" Width="16"/>
因此,如果您想要动态图标大小,您需要从 SystemThemes 之一(例如 aero2.normalcolor.xaml)复制与 MenuItem 相关的所有模板和样式,然后您可以根据需要自定义它们。在您的情况下,需要对这些模板和样式进行大量更改。不幸的是,没有更简单的方法可以做到这一点。而且它也是不可扩展的,因为除非您更改所有系统主题,否则您将只能使用一个系统主题。
此处的相关主题中提出了类似的建议:WPF - 如何设置菜单控件的样式以删除左边距? https://stackoverflow.com/questions/2979127/wpf-how-to-style-the-menu-control-to-remove-the-left-margin or 没有图标区域的 System.Windows.Controls.MenuItem https://stackoverflow.com/questions/5276826/system-windows-controls-menuitem-without-icon-area/24630712.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)