.net WPF菜单项图标尺寸
所以我有一个菜单项(在一个上下文菜单中,如果它真的有区别,不要认为它有区别)。我想使用MenuItem.icon属性在MenuItem中显示图标。下面是执行此操作的XAML代码:.net WPF菜单项图标尺寸,.net,wpf,xaml,menu,icons,.net,Wpf,Xaml,Menu,Icons,所以我有一个菜单项(在一个上下文菜单中,如果它真的有区别,不要认为它有区别)。我想使用MenuItem.icon属性在MenuItem中显示图标。下面是执行此操作的XAML代码: <MenuItem Header="MenuItem1"> <MenuItem.Icon> <Image Source="[pathtoimage]"/> </MenuItem.Icon> </MenuItem> 这很有
<MenuItem Header="MenuItem1">
<MenuItem.Icon>
<Image Source="[pathtoimage]"/>
</MenuItem.Icon>
</MenuItem>
这很有效。但是如果我想用高度和宽度来指定图标的大小呢?网上搜索显示应该是32,有人说应该是20。20最适合我,但我不想硬编码20。我想将其设置为与菜单项相同的高度,因为在不同分辨率下,实际高度可能不同。因此,我尝试了以下方法:
<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>
基本上,问题是由于MenuItem标题
,标题类型为object
,您添加了一个字符串,因此它没有高度/宽度,因此MenuItem
实际高度
将返回自动
如果要添加Textblock
作为标题,这将为MenuItem
提供可用于设置图像大小的高度
<MenuItem x:Name="menuItem1" >
<MenuItem.Header>
<TextBlock Text="MenuItem1" />
</MenuItem.Header>
<MenuItem.Icon>
<Image Height="{Binding Header.ActualHeight, ElementName=menuItem1}"
Width="{Binding Header.ActualHeight, ElementName=menuItem1}" />
</MenuItem.Icon>
</MenuItem>
因此,考虑到这一点,您可以轻松为
菜单项
制作一个ItemContainerTemplate
,以便所有图标都以这种方式运行图标大小和图标区域宽度在菜单项模板和样式中进行硬编码,如下所示
<ContentPresenter x:Name="Icon" Content="{TemplateBinding Icon}" ContentSource="Icon" HorizontalAlignment="Center" Height="16" Margin="3" SnapsToDevicePixels="{TemplateBinding SnapsToDevicePixels}" VerticalAlignment="Center" Width="16"/>
因此,如果您想要动态图标大小,您需要从其中一个系统主题(例如aero2.normalcolor.xaml)复制与MenuItem相关的所有模板和样式,然后您可以根据需要自定义它们。在您的情况下,需要对这些模板和样式进行大量更改。不幸的是,没有更简单的方法可以做到这一点。而且它也不可伸缩,因为除非您更改所有系统主题,否则您只能使用一个系统主题
在这里的相关主题中也提出了类似的建议:或者。尝试过,但没有成功。虽然这很有道理。或者我应该多做点什么?ItemContainerTemplate与我的问题有什么关系?我是否也应该使用它来实现我想要的行为?图标大小可能是针对“aero2”Win8/10硬编码的,但不针对Win7“aero”。当开发操作系统时,可以在两种方式中都产生令人惊讶的结果!=用户操作系统。(在W7上开发时,W10上的剪裁图标,或者在W10上开发时,W7上的疯狂大图标看起来都很清晰)。