【问题标题】:How to get TreeViewItem's ContextMenu, having TreeView as a DataTemplate如何获取 TreeViewItem 的 ContextMenu,将 TreeView 作为 DataTemplate
【发布时间】:2021-10-15 03:30:56
【问题描述】:

我在这样的数据模板中有一个 TreeView:

    <DataTemplate DataType="{x:Type MainFavoriteItems}">
    <TreeView BorderThickness="0">
       <TreeViewItem Header="First Header" ItemsSource="{Binding FavItems}" ItemTemplate="{StaticResource item_template}"/>
       <TreeViewItem Header="Second Header" ../>
       <TreeViewItem Header="Third Header" ../>
    <TreeView.ItemContainerStyle>
        <Style TargetType="{x:Type TreeViewItem}" BasedOn="{StaticResource {x:Type TreeViewItem}}">
        <Setter Property="ContextMenu" Value="{Binding GetMenu}}"/>  // DO not work
    </TreeView.ItemContainerStyle>
    </TreeView>
    </DataTemplate>



internal class MainFavoriteItems{
public IReadOnlyList<Info> FavItems
    {
      get
      {
            List<Info> items = new List<Info>();
            items.Add(new InnerViewModel("1"));
            items.Add(new InnerViewModel("2"));
            NotifyPropertyChanged(() => FavItems);
        return items;
      }
    }
}

public class InnerViewModel
{
public string Id;
public System.Windows.Controls.ContextMenu GetMenu => new CustomContextMenu();
...
}

当我运行它时,标题及其子项看起来很好,但内部项目的右键单击 ContextMenu 没有显示,并且它的 xaml 输出错误说.. GetMenu property not found on object 'MainFavoriteItems' .. 我在做什么错误的 !?谢谢。

【问题讨论】:

    标签: wpf xaml treeview datatemplate


    【解决方案1】:

    您的示例代码甚至无法编译,但您应该将 TreeViewItemItemContainerStyle 设置为 ItemsSource 以使绑定生效:

    <TreeViewItem Header="First Header" ItemsSource="{Binding FavItems}"
                                        ItemTemplate="{StaticResource item_template}">
        <TreeViewItem.ItemContainerStyle>
            <Style TargetType="{x:Type TreeViewItem}" BasedOn="{StaticResource {x:Type TreeViewItem}}">
                <Setter Property="ContextMenu" Value="{Binding GetMenu}"/>
            </Style>
        </TreeViewItem.ItemContainerStyle>
    </TreeViewItem>
    <TreeViewItem Header="Second Header" />
    <TreeViewItem Header="Third Header" />
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-10
      • 1970-01-01
      • 2011-08-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多