将WPF树视图转换为菜单

将WPF树视图转换为菜单,wpf,menu,treeview,menuitem,treeviewitem,Wpf,Menu,Treeview,Menuitem,Treeviewitem,我无法将此工作树视图转换为菜单 此树视图显示正确 <UserControl.DataContext> <ObjectDataProvider ObjectType="{x:Type storage:Database}" MethodName="GetGroups"/> </UserControl.DataContext> <UserControl.Resources> <conv

我无法将此工作树视图转换为菜单

此树视图显示正确

<UserControl.DataContext>
    <ObjectDataProvider ObjectType="{x:Type storage:Database}"
                        MethodName="GetGroups"/>
</UserControl.DataContext>
<UserControl.Resources>
    <converters:PathToNameConverter x:Key="pathToNameConverter" />
</UserControl.Resources>
<TreeView Name="TreeViewMain" ItemsSource="{Binding Path=.}">
    <TreeView.Resources>
        <HierarchicalDataTemplate DataType="{x:Type storage:File}">
            <TreeViewItem Header="{Binding Path=Name, Mode=TwoWay}" />
        </HierarchicalDataTemplate>
        <HierarchicalDataTemplate DataType="{x:Type storage:Group}">
            <TreeViewItem>
                <TreeViewItem.Header>
                    <StackPanel Grid.Row="0" Orientation="Horizontal">
                        <Image Source="../Images/Core/16x16/Folder.png" />
                        <TextBlock Text="{Binding Path=Name, Mode=TwoWay}"/>
                    </StackPanel>
                </TreeViewItem.Header>
                <ItemsControl ItemsSource="{Binding Path=Groups}" />
                <ItemsControl ItemsSource="{Binding Path=Files}" />
            </TreeViewItem>
        </HierarchicalDataTemplate>
    </TreeView.Resources>
</TreeView>

我把所有东西都改成了菜单,但它不起作用。有一个组名和图像,箭头指向右边,它看起来像在工作,但当我点击它时它不会展开

<UserControl.DataContext>
    <ObjectDataProvider ObjectType="{x:Type storage:Database}"
                        MethodName="GetGroups"/>
</UserControl.DataContext>
<Menu Name="MenuMain" ItemsSource="{Binding Path=.}">
    <Menu.Resources>
        <HierarchicalDataTemplate DataType="{x:Type storage:File}">
            <MenuItem Header="{Binding Path=Name, Mode=TwoWay}" />
        </HierarchicalDataTemplate>
        <HierarchicalDataTemplate DataType="{x:Type storage:Group}">
            <MenuItem>
                <MenuItem.Header>
                    <StackPanel Grid.Row="0" Orientation="Horizontal">
                        <Image Source="../Images/Core/16x16/Folder.png" />
                        <TextBlock Text="{Binding Path=Name, Mode=TwoWay}" />
                    </StackPanel>
                </MenuItem.Header>
                <ItemsControl ItemsSource="{Binding Path=Groups}" />
                <ItemsControl ItemsSource="{Binding Path=Files}" />
            </MenuItem>
        </HierarchicalDataTemplate>
    </Menu.Resources>
</Menu>


我做错了什么?

我并没有真正看到你做错了什么,我将发布有效的代码

<Menu ItemsSource="{Binding Menus}" Name="menu" Height="20">        
    <Menu.ItemTemplate>
        <HierarchicalDataTemplate ItemsSource="{Binding Items}" DataType="{x:Type plugin:MenuEntry}">
            <HierarchicalDataTemplate.ItemContainerStyle>
                <Style TargetType="MenuItem">
                    <Setter Property="Command" Value="{Binding Command}" />
                    <Setter Property="Icon" Value="{Binding Icon}" />
                    <Setter Property="InputGestureText" Value="{Binding InputGestureText}" />
                    <Setter Property="IsCheckable" Value="{Binding IsCheckable}" />
                    <Setter Property="IsChecked" Value="{Binding IsChecked}" />

                    <!-- Handle separators -->
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding Header}" Value="[Separator]">
                            <Setter Property="Template">
                                <Setter.Value>
                                    <ControlTemplate>
                                        <Separator />
                                    </ControlTemplate>
                                </Setter.Value>
                            </Setter>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>                    
            </HierarchicalDataTemplate.ItemContainerStyle>
            <ContentControl Content="{Binding Header}"/>                
        </HierarchicalDataTemplate>
    </Menu.ItemTemplate>
</Menu>

菜单绑定到对象的简单集合,这些对象具有标题、图标等所有属性。菜单还具有包含子项的Items属性


这不完全是你想要的,但也许你能解决它。我记得和你一样尝试过类似的方法,我记得失败得很惨。菜单以自己的方式生成MenuItem对象(您正在尝试在其中添加另一个对象-您不能这样做,您只需对其进行样式设置),而且这两个Items控件在我看来有点奇怪(虽然我知道您需要它们)。

我并没有真正看到您做错了什么,我将发布有效的代码

<Menu ItemsSource="{Binding Menus}" Name="menu" Height="20">        
    <Menu.ItemTemplate>
        <HierarchicalDataTemplate ItemsSource="{Binding Items}" DataType="{x:Type plugin:MenuEntry}">
            <HierarchicalDataTemplate.ItemContainerStyle>
                <Style TargetType="MenuItem">
                    <Setter Property="Command" Value="{Binding Command}" />
                    <Setter Property="Icon" Value="{Binding Icon}" />
                    <Setter Property="InputGestureText" Value="{Binding InputGestureText}" />
                    <Setter Property="IsCheckable" Value="{Binding IsCheckable}" />
                    <Setter Property="IsChecked" Value="{Binding IsChecked}" />

                    <!-- Handle separators -->
                    <Style.Triggers>
                        <DataTrigger Binding="{Binding Header}" Value="[Separator]">
                            <Setter Property="Template">
                                <Setter.Value>
                                    <ControlTemplate>
                                        <Separator />
                                    </ControlTemplate>
                                </Setter.Value>
                            </Setter>
                        </DataTrigger>
                    </Style.Triggers>
                </Style>                    
            </HierarchicalDataTemplate.ItemContainerStyle>
            <ContentControl Content="{Binding Header}"/>                
        </HierarchicalDataTemplate>
    </Menu.ItemTemplate>
</Menu>

菜单绑定到对象的简单集合,这些对象具有标题、图标等所有属性。菜单还具有包含子项的Items属性


这不完全是你想要的,但也许你能解决它。我记得和你一样尝试过类似的方法,我记得失败得很惨。菜单以自己的方式生成MenuItem对象(您正在尝试在其中添加另一个对象-您不能这样做,您只需设置样式即可),而且这两个Items控件在我看来有点奇怪(虽然我知道您需要它们)。

感谢您的回答,它很有效,但它并不能真正解决我的问题。我找不到我的树视图到菜单的一对一转换;出于某种原因,我被引导去相信它的存在。我用代码实现了我的菜单。干杯谢谢你的回答,这很有效,但并不能真正解决我的问题。我找不到我的树视图到菜单的一对一转换;出于某种原因,我被引导去相信它的存在。我用代码实现了我的菜单。干杯