¿Crear una barra de menú en WPF?


120

Quiero crear una barra de menú idéntica a la de los formularios de Windows en mi aplicación WPF.

¿Cómo haría esto?

La opción de menú en la caja de herramientas de controles de WPF solo muestra una barra en blanco.

Respuestas:


228
<DockPanel>
    <Menu DockPanel.Dock="Top">
        <MenuItem Header="_File">
            <MenuItem Header="_Open"/>
            <MenuItem Header="_Close"/>
            <MenuItem Header="_Save"/>
        </MenuItem>
    </Menu>
    <StackPanel></StackPanel>
</DockPanel>

11
¿Por qué hay guiones bajos? ¿Por qué están ocultos?
C4d

27
@ C4u: Esos establecen las teclas de método abreviado (por ejemplo, Alt + f para "archivo")
BlueRaja - Danny Pflughoeft

He preparado un tutorial completo sobre menús de WPF, enlace de comandos, agregando teclas de acceso directo, etc.en youtu.be/bdmVWGjpA_8
Zaheer

45

Sí, un menú te da la barra pero no te da ningún elemento para poner en la barra. Necesitas algo como (de uno de mis propios proyectos):

<!-- Menu. -->
<Menu Width="Auto" Height="20" Background="#FFA9D1F4" DockPanel.Dock="Top">
    <MenuItem Header="_Emulator">
    <MenuItem Header="Load..." Click="MenuItem_Click" />
    <MenuItem Header="Load again" Click="menuEmulLoadLast" />
    <Separator />
    <MenuItem Click="MenuItem_Click">
        <MenuItem.Header>
            <DockPanel>
                <TextBlock>Step</TextBlock>
                <TextBlock Width="10"></TextBlock>
                <TextBlock HorizontalAlignment="Right">F2</TextBlock>
            </DockPanel>
        </MenuItem.Header>
    </MenuItem>
    :

39
Hola, en lugar de ese DockPanel anidado, puedes usar el atributo InputGestureText. Por ejemplo<MenuItem Header="Step" Click="MenuItem_Click" InputGestureText="F2" />
AlanFoster

3
@AlanFoster Debes publicar tu propia respuesta, incluida esa pista. ¡Casi me lo pierdo y es una pena! Puede reutilizar la configuración a partir de la respuesta aceptada. Es el más simple, diría yo. Y mejor formateado.
Konrad Viltersten

9
<StackPanel VerticalAlignment="Top">
    <Menu Width="Auto" Height="20">
        <MenuItem Header="_File">
            <MenuItem x:Name="AppExit" Header="E_xit" HorizontalAlignment="Left" Width="140" Click="AppExit_Click"/>
        </MenuItem>
        <MenuItem Header="_Tools">
            <MenuItem x:Name="Options" Header="_Options" HorizontalAlignment="Left" Width="140"/>
        </MenuItem>
        <MenuItem Header="_Help">
            <MenuItem x:Name="About" Header="&amp;About" HorizontalAlignment="Left" Width="140"/>
        </MenuItem>
    </Menu>
    <Label Content="Label"/>
</StackPanel>

2
<Container>
    <Menu>
        <MenuItem Header="File">
            <MenuItem Header="New">
               <MenuItem Header="File1"/>
               <MenuItem Header="File2"/>
               <MenuItem Header="File3"/>
            </MenuItem>
            <MenuItem Header="Open"/>
            <MenuItem Header="Save"/>
        </MenuItem>
    </Menu>
</Container>
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.