【问题标题】:Adding context menu to tree view by XAML only仅通过 XAML 将上下文菜单添加到树视图
【发布时间】:2013-11-28 19:56:29
【问题描述】:

尝试仅使用 xaml 代码将上下文菜单添加到 TreeView

  • 电视节目
    • 第 1 季
    • 第 n 季

只有在我右键单击季节节点时才会显示上下文菜单。

这可能吗?我知道如何用后面的代码来解决它,但我想学习按预期使用 WPF。我很难确定我是否应该能够仅使用 xaml 来解决这个问题。

当前 xaml:

    <TreeView 
        Grid.Row="1" 
        Grid.Column="0"
        ItemsSource="{Binding TvShows}" x:Name="TvShowsTreeView"
        SelectedItemChanged="TvShowsTreeViewOnSelectedItemChanged">

        <TreeView.ItemTemplate>
            <HierarchicalDataTemplate DataType="tvShows:TvShow" ItemsSource="{Binding Seasons}">
                <TextBlock Text="{Binding Name}" />
            </HierarchicalDataTemplate>
        </TreeView.ItemTemplate>
    </TreeView>

【问题讨论】:

  • 你是如何构建树的?通过使用HierarchicalDataTemplate?发布您当前的 XAML。
  • @HighCore,添加了 xaml。也有一些上下文菜单的“尝试”,但它并没有带来太多,所以我现在把它省略了,希望从 SO 中得到一些有意义的东西:)

标签: c# wpf treeview contextmenu


【解决方案1】:

尝试使用HierarchicalDataTemplateItemTemplate 属性。它应该是这样的:

    <HierarchicalDataTemplate DataType="tvShows:TvShow" ItemsSource="{Binding Seasons}">
        <TextBlock Text="{Binding Name}" />
        <HierarchicalDataTemplate.ItemTemplate>
            <DataTemplate DataType="TypeOfSeasonInYourApplication">
                <TextBlock Text="{Binding Name}">
                    <TextBlock.ContextMenu>
                        <ContextMenu>
                            <!-- Place MenuItems here -->
                        </ContextMenu>
                    </TextBlock.ContextMenu>
                </TextBlock>
            </DataTemplate>
        </HierarchicalDataTemplate.ItemTemplate>
    </HierarchicalDataTemplate>

我实际上并没有自己测试过,所以请告诉我这是否有效。

【讨论】:

  • 不,不完全是:属性“VisualTree”不支持“DataTemplate”类型的值。
  • 嗯,奇怪,这在我的情况下曾经有效。根据您写的错误消息,我只能建议您仔细检查是否将 DataTemplate 放置在 ItemTemplate 属性中而不是 HierarchicalDataTemplate 本身中(这肯定行不通)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-15
  • 1970-01-01
  • 2018-12-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多