Placement Target始终为null

时间:2014-06-12 10:56:55

标签: c# wpf

我有一个像这样的按钮的上下文菜单:

<Button x:Name="btnView" Tag="{Binding RelativeSource={RelativeSource FindAncestor,
        AncestorType={x:Type UserControl}},Path=DataContext}"
    <Button.ContextMenu >
        <ContextMenu x:Name="contextMenu" 
                     DataContext="{Binding PlacementTarget.Tag,RelativeSource={RelativeSource Self}}" >
            <MenuItem Header="View" Command="{Binding CommandObj.ViewCommand}"/>
        </ContextMenu>
    </Button.ContextMenu>
</Button>

单击菜单项时未触发ViewCommand。当我检查放置目标是否为空。谁能告诉我我在这里做错了什么?

1 个答案:

答案 0 :(得分:0)

为了使您的ViewCommand ICommand能够正常运作,有关XAML的一些事情必须如此:

<Button x:Name="btnView" Tag="{Binding RelativeSource={RelativeSource FindAncestor,
        AncestorType={x:Type UserControl}},Path=DataContext}"
    <Button.ContextMenu >
        <ContextMenu x:Name="contextMenu" DataContext="{Binding PlacementTarget.Tag,
            RelativeSource={RelativeSource Self}}">
            <MenuItem Header="View" Command="{Binding CommandObj.ViewCommand}"/>
        </ContextMenu>
    </Button.ContextMenu>
</Button>
  1. 您必须已将对象的实例设置为UserControl.DataContext属性。
  2. 该对象必须在其中声明一个名为CommandObj的公共属性。
  3. CommandObj属性必须是类型为ICommand的公共属性,其中包含ViewCommand
  4. 如果这些条件中的任何一个不正确,那么您的ICommand将无效,您将需要满足这些条件。否则,您似乎正确地将DataContext值正确传递到ContextMenu