¿Cómo comparto una definición de menú entre un menú contextual y un menú normal en WPF?

StackOverflow https://stackoverflow.com/questions/150150

  •  02-07-2019
  •  | 
  •  

Pregunta

Tengo un MenuItem definido que me gustaría compartir entre dos menús diferentes en una página. El menú contiene funcionalidades que son iguales entre ambos menús y no quiero dos copias. ¿Hay alguna forma de definir un MenuItem en la página Recursos y hacer referencia a él en el ContextMenu XAML a continuación?

<Page.Resources>
    <MenuItem x:Key="123"/>
</Page.Resources>

<ContextMenu>
    <MenuItem>Something hardcoded</MenuItem>

    <!-- include shared menu here -->

</ContextMenu>
¿Fue útil?

Solución

He hecho esto configurando x: Shared = " False " en el elemento del menú en sí. Los recursos se comparten entre cada lugar que los usa de forma predeterminada (es decir, una instancia en todos los usos), por lo que desactivar eso significa que una nueva "copia" del recurso se hace cada vez.

Entonces:

<MenuItem x:Key="myMenuItem" x:Shared="False" />

Seguirá recibiendo una " copia " de eso, pero solo necesitas definirlo en un solo lugar. A ver si eso ayuda. Lo usa así dentro de la definición de su menú:

<StaticResource ResourceKey="myMenuItem" />

Otros consejos

Debido a que desea mezclar y combinar ... Haría un control personalizado que hereda de ContextMenu que tiene un " SharedMenuItems " Propiedad de dependencia y una propiedad de dependencia de MenuItems. De esta manera, su control puede decidir cómo fusionar estos dos conjuntos. Si desea un ejemplo de esto, hágamelo saber.

Una serie de opciones: a) Enlace de datos el ContextMenu o el Menú a la misma colección subyacente y use plantillas de elementos y otros para el trabajo b) Usar comandos y enlazar datos a un conjunto de enlaces de comandos

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