首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ContextMenu中的CommandBinding

ContextMenu中的CommandBinding
EN

Stack Overflow用户
提问于 2013-03-27 10:52:48
回答 1查看 1.5K关注 0票数 3

我有一个TreeView,并创建了一个基本的TreeItem类型。每个TreeItem都有一个标题、一个用于子项的TreeItem集合和一个用于可能的上下文菜单的集合。TreeItem类具有以下对象:

代码语言:javascript
复制
public delegate void dExecute(TreeItem item);

public dExecute ExecuteTarget { get; set; }
public object Tag { get; set; }
public string Header { get; set; }
public List<TreeItem> Children { get; set; }
public List<TreeItem> ContextMenu { get; set; }

上下文菜单再次使用HierarchicalDataTemplate来显示TreeItem对象(对于树视图和上下文菜单中的项,我使用了TreeItem类)。上下文菜单如下所示:

代码语言:javascript
复制
<ContextMenu DataContext="{Binding PlacementTarget.DataContext, RelativeSource={RelativeSource Self}}" Visibility="{Binding ShowContextMenu}" ItemsSource="{Binding ContextMenu}">
    <ContextMenu.ItemTemplate>
        <HierarchicalDataTemplate ItemsSource="{Binding Children}">
            <TextBlock Text="{Binding Header}"  />
            <HierarchicalDataTemplate.ItemContainerStyle>
                <Style TargetType="MenuItem">
                    <Setter Property="Command" Value="{Binding Execute}"/>
                </Style>
            </HierarchicalDataTemplate.ItemContainerStyle>
        </HierarchicalDataTemplate>
    </ContextMenu.ItemTemplate>
</ContextMenu>

上下文菜单按照我想要的方式呈现。我已经创建了一个上下文菜单,我只将其附加到树视图中的一些项目上。这是它的内容。

代码语言:javascript
复制
public List<TreeItem> ContextMenu
{
    get
    {
        List<TreeItem> list = new List<TreeItem>();
        TreeItem ti = new TreeItem("Some Action") { ExecuteTarget = targetMethod};
        list.Add(ti);
        ti = new TreeItem("test");
        ti.Children.Add(new TreeItem("foo") { ExecuteTarget = targetMethod});
        ti.Children.Add(new TreeItem("bar") { ExecuteTarget = targetMethod});
        ti.Children.Add(new TreeItem("foo") { ExecuteTarget = targetMethod});
        TreeItem ti2 = new TreeItem("inner"){ ExecuteTarget = targetMethod};
        ti.Children.Add(ti2);
        ti2.Children.Add(new TreeItem("foo") { ExecuteTarget = targetMethod});
        list.Add(ti);
        return list;
    }
}

上下文菜单如下所示。

它看起来应该是这样的。命令按其应有的方式工作。上下文菜单最高级别上的命令除外。当我点击“某些操作”时,什么也不会发生。我假设我必须向XAML添加一些东西,但是我不知道在哪里。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-27 11:16:22

代码语言:javascript
复制
<ContextMenu DataContext="{Binding PlacementTarget.DataContext, RelativeSource={RelativeSource Self}}" Visibility="{Binding ShowContextMenu}" ItemsSource="{Binding ContextMenu}">
    <ContextMenu.ItemTemplate>
        <HierarchicalDataTemplate ItemsSource="{Binding Children}">
            <TextBlock Text="{Binding Header}"  />
            <HierarchicalDataTemplate.ItemContainerStyle>
                <Style TargetType="MenuItem">
                    <Setter Property="Command" Value="{Binding Execute}"/>
                </Style>
            </HierarchicalDataTemplate.ItemContainerStyle>
        </HierarchicalDataTemplate>
    </ContextMenu.ItemTemplate>

    <!-- this is what you're missing -->
    <ContextMenu.ItemContainerStyle>
        <Style TargetType="MenuItem">
            <Setter Property="Command" Value="{Binding Execute}"/>
        </Style>
    </ContextMenu.ItemContainerStyle>
</ContextMenu>
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15651143

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档