带图像的WPF菜单项

Vyt*_*tas 51 wpf image menu menuitem

如何定义MenuItem.Icon以便将MenuItemHeader文本放在菜单项图像下面?感谢您的帮助!

小智 147

怎么样的事情:

<ContextMenu>
    <MenuItem Header="Reports">
        <MenuItem.Icon>
            <Image Source="/XSoftArt.WPFengine;component/Images/export32x32xp.png"/>
        </MenuItem.Icon>
    </MenuItem>
</ContextMenu>
Run Code Online (Sandbox Code Playgroud)

  • 如果需要,还将图像的构建操作属性设置为“内容”,并将复制到输出目录设置为“如果更新则复制”或“始终”。 (2认同)
  • 我已经否决了这个答案,因为OP明确表示他想在图像下方(垂直)显示文本。这将在文本前面显示图标。 (2认同)

Ray*_*rns 49

简单的方法是不使用Icon属性,而是将图标放在Header中:

<Menu>
  <MenuItem>
    <MenuItem.Header>
      <StackPanel>
        <Image Width="20" Height="20" Source="/XSoftArt.WPFengine;component/Images/export32x32xp.png" />
        <ContentPresenter Content="Reports" />
      </StackPanel>
    </MenuItem.Header>
  </MenuItem>
  <MenuItem Header="Export" />
  <MenuItem Header="New record" />
</Menu>
Run Code Online (Sandbox Code Playgroud)

对于这个简单的情况,<ContentPresenter Content="Reports" />可以用a代替,<TextBlock Text="Reports" />因为这就是ContentPresenter用来呈现字符串的东西.对于更复杂的Header=,您可以使用ContentPresenter如图所示.

  • 下面的答案更容易,并使用Icon属性? (17认同)
  • @ AlexHopeO'Connor下面的答案也是错误的,如果你会阅读OP在文本中提出的问题,而不是标题.另外你可能已经注意到,下面的答案与OP提供的代码没有任何不同.他清楚地询问如何在图像下面显示文字,而不是图像在它旁边,下面.这就是为什么这个答案在标题内设置一个堆栈面板,其默认的Verticalation为vertical. (4认同)