2011-04-25 15 views
16

Tengo un botón con un comando predeterminado y un menú contextual para otros comandos disponibles:¿Cómo puedo decirle a un ContextMenu que se coloque con relación a su control y no al cursor?

<Button Content="Do this" Height="23" Width="75" Command="local:MyCommands.ThisCommand"> 
    <Button.ContextMenu> 
     <ContextMenu> 
      <MenuItem Header="Do this" Command="local:MyCommands.ThisCommand" /> 
      <MenuItem Header="Do that" Command="local:MyCommands.ThatCommand" /> 
     </ContextMenu> 
    </Button.ContextMenu> 
</Button> 

Por defecto, el menú contextual aparece comenzando en el punto caliente del cursor:

Sin embargo, me gustaría que aparezca en una posición relativa fija, debajo del botón (falsa, captura de pantalla editada):

Configurando el menú contextual Placement, PlacementRectangle y PlacementTarget propiedades no parece hacer nada; el menú contextual insiste en colgar el cursor donde sea que haga clic derecho en mi botón. Peor aún, al enfocar el botón y presionar menu key, el menú contextual se coloca delante del botón, bloqueándolo por completo.

Entonces, ¿cómo exactamente especifico que el menú contextual debería aparecer debajo del botón?

Respuesta

18

Salida Observaciones bajo ContextMenu.Placement

y probar este

<Button Content="Do this" Height="23" Width="75" 
    ContextMenuService.Placement="Bottom" 
    Command="local:MyCommands.ThisCommand"> 
    <Button.ContextMenu> 
     <ContextMenu> 
      <MenuItem Header="Do this" Command="local:MyCommands.ThisCommand" /> 
      <MenuItem Header="Do that" Command="local:MyCommands.ThatCommand" /> 
     </ContextMenu> 
    </Button.ContextMenu> 
</Button> 
+0

Gracias. ¿Sabes por qué no funciona el ajuste 'Placement' en' ContextMenu'? – BoltClock

+1

@BoltClock No estoy seguro. Pero consulte la sección Observaciones de ['ContextMenu.Placement'] (http://msdn.microsoft.com/en-us/library/system.windows.controls.contextmenu.placement.aspx) que establece establecer' ContextMenuService. Ubicación ' –

+5

La sección Comentarios tiene la respuesta: "Cuando el' ContextMenu' se asigna a la propiedad 'FrameworkElement.ContextMenu' o' FrameworkContentElement.ContextMenu', 'ContextMenuService' cambia este valor de esta propiedad cuando' ContextMenu' abre ". Ahora todo encaja. – BoltClock

Cuestiones relacionadas