Как получить доступ к элементу управления из пункта меню ContextMenu через визуальное дерево?

Кажется, это довольно популярная тема, но...

У меня есть следующий XAML:

<internal:MyCommandObject x:Name="CommandModel"/>

<Button DockPanel.Dock="Bottom" Command="{Binding DoAction, ElementName=CommandModel}">
    <Button.ContextMenu>
        <ContextMenu DataContext="{Binding PlacementTarget, RelativeSource={RelativeSource Self}}">
            <MenuItem Command="{Binding DoAction, ElementName=CommandModel}"/>
        </ContextMenu>
    </Button.ContextMenu>
    Click Me
</Button>

Теперь MyCommandObject— это элемент управления, который предоставляет динамические команды из своего DataContext. Вы знаете, что будет дальше.:)

По сути, команда кнопки работает отлично -, когда я нажимаю ее, команда DoActionна MyCommandObjectвыполняется отлично. Однако команда в элементе меню не выполняется. Я пробовал различные трюки, такие как установка контекстного меню datacontextна placementTarget, чтобы оно могло перемещаться по визуальному дереву элементов управления и т. д., но ничего не происходит.

Какое конкретное сочетание рун RelativeSourceи CommandTargetмне нужно, чтобы заставить это работать?

5
задан akjoshi 6 July 2012 в 12:24
поделиться