Контекстное меню на TreeViewItem Вызывает метод TreeViewItem? - PullRequest
0 голосов
/ 13 мая 2009

У меня есть настройка 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. Я знаю, что могу просто создать новый обработчик событий в охватывающем окне, но я бы предпочел, чтобы сам выбранный элемент обрабатывал событие.

Мысли

Спасибо!

1 Ответ

2 голосов
/ 13 мая 2009

К сожалению, я не думаю, что есть автоматизированный способ сделать это. Ближайшим вариантом будет установить RoutedUICommand для каждого элемента в ContextMenu, а затем создать CommandBinding для каждого в вашем классе. Если вы хотите, чтобы они перешли на TreeViewItem, вам, вероятно, потребуется создать подкласс TreeViewItem и настроить CommandBindings там.

Один вариант, который, как мне показалось, может сработать, - это добавить EventSetter для MenuItem.Click в стиль TreeViewItem. Однако это не сработало - возможно, потому что элементы в ContextMenu находятся в другом визуальном дереве, чем TreeViewItems.

...