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

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

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

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

    <!-- include shared menu here -->

</ContextMenu>

person Shaun Bowe    schedule 29.09.2008    source источник


Ответы (3)


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

So:

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

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

<StaticResource ResourceKey="myMenuItem" />
person Matt Hamilton    schedule 29.09.2008

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

person Phobis    schedule 29.09.2008
comment
Хотя это не ответило на мой точный вопрос, это похоже на хорошую работу. Я это попробую. Спасибо. - person Shaun Bowe; 29.09.2008
comment
Дайте мне знать, если у вас возникнут какие-либо проблемы. Я могу опубликовать код/xaml, чтобы сделать это. - person Phobis; 30.09.2008

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

person Dominic Hopton    schedule 30.09.2008