Как мне разделить определение меню между контекстным меню и обычным меню в WPF

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

  •  02-07-2019
  •  | 
  •  

Вопрос

У меня есть определенный элемент меню, которым я хотел бы поделиться между двумя разными меню на одной странице.Меню содержит функциональность, которая одинакова для обоих меню, и мне не нужны две его копии.Можно ли как-нибудь определить MenuItem на странице.Ресурсы и ссылаться на него в ContextMenu XAML ниже?

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

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

    <!-- include shared menu here -->

</ContextMenu>
Это было полезно?

Решение

Я сделал это, установив x:Shared="False" в самом пункте меню.Ресурсы по умолчанию распределяются между каждым местом, которое их использует (что означает один экземпляр для всех видов использования), поэтому отключение этого означает, что каждый раз создается новая "копия" ресурса.

Итак:

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

Вы по-прежнему получите его "копию", но вам нужно определить его только в одном месте.Посмотрим, поможет ли это.Вы используете это следующим образом в своем определении меню:

<StaticResource ResourceKey="myMenuItem" />

Другие советы

Потому что вы хотите смешивать и сочетать...Я бы создал пользовательский элемент управления, наследуемый от ContextMenu, который имеет свойство зависимости "SharedMenuItems" и свойство зависимости MenuItems.Таким образом, ваш элемент управления может решить, как объединить эти два набора вместе.Если вам нужен пример этого, пожалуйста, дайте мне знать.

Несколько вариантов:a) Привязать ContextMenu или меню к той же базовой коллекции и использовать шаблоны элементов и др. для работы b) Использовать команды и привязать данные к набору привязок команд

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top