Pregunta

N. B ESTA PREGUNTA HA SIDO ACTUALIZADO, LEER mas ABAJO

Hola,

Quiero crear un menú contextual personalizado que tiene 4 sub-menús, cada uno en su propio cuadrante (arriba a la izquierda, superior derecha, inferior izquierda, inferior derecha).Similar a la de 3ds Studio Max.

Así es como he abordado la cuestión hasta el momento:- crear un personalizado de control WPF, se derivan de ContextMenu[1]
- declarar 4 propiedades de dependencia de ContextMenu, estos serán los menús se muestran y se pueden establecer a partir de XAML.
- AddOwner a la ContextMenu.IsOpenProperty, la adición de una notificación de cambio de propiedades.
- cuando el IsOpen los cambios de propiedad que establece la IsOpen propiedad de 4 niño menús de contexto.
- el uso de ContextMenuService conjunto de la Vertical y Horizontal de los desplazamientos de los menús de contexto para hacer que aparecen en cada uno de los cuadrantes;la unión de la real propiedades height y width para calcular las compensaciones.

[1] Necesidad de derivar desde el menú de contexto de lo contrario no se puede asignar a la propiedad ContextMenu en la Ventana.

Este aparece para trabajar, hay problemas con los menús NO quedando abierto (que está cerrado, ya que el enfoque está fuera del menú), pero estoy seguro de que el uso de Reflector.NET encontrar una manera alrededor de este.

Este es mi primer custom control WPF que he intentado escribir;y no estoy seguro si este es el mejor enfoque.

Cualquier sugerencias/ideas sobre cómo crear este Quad menú de Contexto?

¿Fue útil?

Solución 2

ACTUALIZACIÓN

OK.Después de jugar un poco con los controles personalizados tengo algo que es de trabajo mejor que antes.Todos los menús ahora permanecen abiertos.

Lo que he hecho:
- creado control personalizado denominado QuadContextMenu derivados de ContextMenu, cambiar el estilo predeterminado de la clave.
- el estilo para el control tiene 4 emergente primitivas:
- cada uno con PART_ nombre, así que obtener una referencia a ellos cuando los OnApplyTemplate.
- cada uno tiene de niño QuadMenu, que es la medida de control derivados de MenuBase.
- cada uno tiene sus VerticleOffset y HorizontalOffset propiedades de unión a la ActualHeight y ActualWidth de el niño [2].

QuadMenu Estilo/De La Plantilla De Control:
- tiene un clásico de la frontera con un dockpanel, y una frontera con un textblock para poner el nombre del menú.

[2] la forma de la posición de los menús en el Quad:- TopLeft es offset negativo de la real de la anchura y la altura
- TopRight es offset negativo de la altura real
- BottomLeft es offset negativo de la altura real
- BottomRight es NO offset y está en su ubicación original

alt text

NUEVAS PREGUNTAS/PROBLEMAS

Estos son los próximos retos para que este control:
1.en el momento en el teclado y el ratón es bloqueado/capturado por el primer menú que se centran en y los otros no están disponibles al mover el ratón sobre ellos.lo que significa que sólo se puede utilizar 1 de los menús.
2.voltear la MenuItem de manera que para el TopLeft/BottomLeft el submenú que se abre en el lado izquierdo.

Ya he intentado sustituir el elemento de menú reemplazando el GetContainerForItemOverride métodos para volver QuadMenuItem.QuadMenuItem es un control personalizado se derivan de MenuItem.Cuando hago esto, sin embargo, voy a perder los submenús funcionalidad que es muy frustrante.

Si alguien tiene alguna sugerencia/trucos/sugerencias sobre cómo abordar estos temas sería muy apreciada!:D Gracias

Otros consejos

No puedo pensar en dos enfoques, ninguno de los dos son, necesariamente, que limpia, pero tiene el potencial de funcionar si usted tiene el tiempo.

Enfoque 1

Utilice un menú de contexto sino a través de la configuración de la plantilla de hacerlo de modo que el ContextMenu en realidad sólo muestra un control que le sucede a abrir otras ventanas. Quizás trucos se pueden hacer de manera que la apertura de estos menús secundarios no toma el foco lejos. Esto podría terminar siendo causando el problema original.

Enfoque 2

¿Qué ocurre si se establece en false ContextMenu.StaysOpen y luego intenta controlar cuando el menú se cierra a sí mismo?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top