2008-09-29 2 views
2

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

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

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

    <!-- include shared menu here --> 

</ContextMenu> 

ответ

3

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

Итак:

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

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

<StaticResource ResourceKey="myMenuItem" /> 
1

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

+0

Хотя это не отвечало на мой точный вопрос, это кажется хорошей работой. Я это попробую. Благодарю. – 2008-09-29 19:27:09

0

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