risposta-alla-domanda-sullo-sviluppo-web-bd.com

Voce di menu WPF con immagine

Come definire MenuItem.Icon in modo che il testo MenuItemHeader venga posizionato sotto l'immagine della voce di menu? Grazie per l'aiuto!

51
Vytas

Il modo più semplice è quello di non usare la proprietà Icona ma di inserire l'icona nell'intestazione:

<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>

Per questo semplice caso il <ContentPresenter Content="Reports" /> può essere sostituito con un <TextBlock Text="Reports" /> perché è quello che ContentPresenter userebbe per presentare comunque la stringa. Per più complessi Header=, puoi usare ContentPresenter come mostrato.

49
Ray Burns

Come qualcosa sulla falsariga di:

<ContextMenu>
    <MenuItem Header="Reports">
        <MenuItem.Icon>
            <Image Source="/XSoftArt.WPFengine;component/Images/export32x32xp.png"/>
        </MenuItem.Icon>
    </MenuItem>
</ContextMenu>
144
DanielE

Nel caso di StackPanel usa Label e non TextBlock poiché solo Label ti permetterà di avere gli mnemonici nel menu, come _Reports.

3
tridy