Контекстное меню TreeViewItem вызывает метод TreeViewItem?
-
21-08-2019 - |
Вопрос
у меня есть TreeView
настроить так, чтобы каждый TreeViewItem
имеет контекстное меню, вызываемое правой кнопкой мыши, применяемое в качестве Style
.Что-то вроде:
<Grid.Resources>
<ContextMenu x:Key="contextMenu">
<MenuItem Header="Save" IsEnabled="{Binding Path=Saveable}"/>
<MenuItem Header="Copy" IsEnabled="{Binding Path=Copyable}"/>
<MenuItem Header="Remove" IsEnabled="{Binding Path=Removeable}"/>
</ContextMenu>
<Style TargetType="TreeViewItem">
<Setter Property="ContextMenu" Value="{StaticResource contextMenu}" />
</Style>
</Grid.Resources>
Saveable, Copyable и Removeable — это свойства, которые берутся из объекта, который используется в качестве TreeViewItem
.
Я ищу, когда пользователь нажимает на MenuItem
, он щелкнет соответствующий метод выбранного объекта.Итак, нажимаем «Сохранить» MenuItem
назвал бы object.Save()
, «Копировать» звонки object.Copy()
, и т. д.Но я не уверен, как будет выглядеть синтаксис и приемлема ли эта идея с точки зрения типичного стиля WPF.Я знаю, что могу просто создать новый обработчик событий в окружающем окне, но я бы предпочел, чтобы событие обрабатывал сам выбранный элемент.
Мысли?
Спасибо!
Решение
К сожалению, я не думаю, что существует автоматизированный способ сделать это.Ближайшим вариантом будет установка RoutedUICommand
за каждый товар в ContextMenu
, а затем создайте CommandBinding
для каждого в вашем классе.Если вы хотите, чтобы они пошли в TreeViewItem
, вам, вероятно, понадобится создать подкласс TreeViewItem
и настроить CommandBindings
там.
Единственный вариант, который, по моему мнению, мог бы сработать, — это добавить EventSetter
для MenuItem.Click
к TreeViewItem
стиль.Однако это не сработало - возможно, потому, что элементы в ContextMenu
находятся в другом визуальном дереве, чем TreeViewItems
.