2011-04-14 32 views
1

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

此树视图显示正确。

<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> 

我在做什么错?

回答

1

我真的没有看到你做错了什么,我会发布代码,而不是作品。

<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> 

菜单势必具有类似标题的所有属性的对象的集合简单,图标等,他们也有它包含子项的项目属性。

这不完全是你在找什么,但也许你将能够解决它。我记得像你一样尝试类似的方法,我记得很糟糕。 Menu自己生成MenuItem对象(并且你正在尝试添加另一个对象 - 你不能这样做,你只能改变它的样式),而且两个ItemsControls对我来说看起来有点奇怪(尽管我理解你需要他们)。

+0

感谢您的回答,它的工作原理,但它并没有真正解决我的问题。我无法找到我的树视图到菜单的一对一转换;出于某种原因,我导致相信存在。我在代码中实现了我的菜单。干杯! – Michael 2011-04-15 00:34:24