树视图项节点的上下文菜单命令

时间:2012-11-18 22:25:27

标签: wpf xaml command contextmenu

在下面的标记中,我在分层模板中使用树视图节点的上下文菜单。问题是我想将上下文菜单项绑定到单个命令,但由于我使用上下文菜单项样式,没有其他方法将命令绑定到菜单项。如何将它们绑定到视图模型根目录中定义的命令。

 <HierarchicalDataTemplate  x:Key="NodeTemplate">
            <StackPanel Orientation="Horizontal">
                <StackPanel.ContextMenu>
                    <ContextMenu>
                        <MenuItem Header="Copy">
                        </MenuItem>
                        <MenuItem Header="Paste">
                        </MenuItem>
                        <ContextMenu.ItemContainerStyle>
                            <Style TargetType="MenuItem">
                                <Setter Property="Command" Value="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}, Path=DataContext.Copy}"/>
                                <Setter Property="CommandParameter" Value="{Binding Tag}"/>
                            </Style>
                        </ContextMenu.ItemContainerStyle>
                    </ContextMenu>
                </StackPanel.ContextMenu>
                <TextBlock Text="{Binding Path=Label}" Style="{StaticResource TreeTextStyle}" ToolTip="{Binding Path=Description}" Tag="{Binding Path=Tag}">
                </TextBlock>
            </StackPanel>
</HierarchicalDataTemplate>

1 个答案:

答案 0 :(得分:0)

为什么不呢:

<MenuItem Header="Copy" Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}}, Path=DataContext.Copy}>

编辑:你是对的它不起作用,因为它是一个ContextMenu,而ContextMenu是在它的PlacementTarget元素的Visual Tree之外绘制的,因此FindAncestor不起作用。请尝试以下方法:

Command="{Binding Path=DataContext.Copy, Source={x:Reference view}"/>

确保您为实际视图提供x:Name="view"