Я хочу добавить контекстное меню к элементам в списке.Обычно ответ заключается в добавлении контекстного меню в корень шаблона элемента.Тем не менее, я использую селектор шаблонов, поэтому используется несколько шаблонов, в зависимости от данных каждого элемента в списке.Это означает, что мне нужно добавить одно и то же определение contextmenu для каждого шаблона, что не очень привлекательно.
Одним из решений является завершение таблицы данных в ContentControl, что даст мне единственное место для определения контекстного меню.Тем не менее, я считаю, что это добавит накладные расходы, которые не нужны.
Другое решение, которое я попробовал, - это добавить ContextMenu в словарь ресурсов, но я полагаю, что это приводит к совместному использованию одного и того же экземпляра объекта для всех видов использования, и из-за способа реализации ContextMenu это также не работает.
Третье решение - использовать событие Loaded
для вызова функции, которая соответствующим образом заполняет контекстное меню.Однако это приводит к перемещению большого количества кода, который должен быть в XAML, в код, и выглядит довольно некрасиво.Если есть какой-то способ определения контекстного меню в xaml, а затем просто ссылка на него из кода, я нахожу это привлекательным, но я не совсем понимаю, как это сделать.
Какой правильный способиспользовать одно и то же ContextMenu для всех шаблонов в селекторе шаблонов?
Это метод ContentControl, который работает, но в итоге добавляет два элемента управления содержимым к каждому элементу:
<ListBox.ItemTemplate>
<DataTemplate>
<ContentControl>
<toolkit:ContextMenuService.ContextMenu>
<toolkit:ContextMenu Loaded="ContextMenu_Loaded">
<toolkit:MenuItem Header="Delete"/>
</toolkit:ContextMenu>
</toolkit:ContextMenuService.ContextMenu>
<ContentControl ContentTemplate="{StaticResource MyTemplate}" Content="{Binding}"/>
</ContentControl>
</DataTemplate>
</ListBox.ItemTemplate>