2011-04-14 5 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 객체를 자체적으로 생성합니다. 당신은 MenuItem 객체를 생성합니다. 당신은 그것을 대신해서 스타일을 지정해야합니다. 두 개의 ItemsControls가 나에게 조금 이상합니다. 너는 그들을 필요로한다).

+0

답장을 보내 주셔서 감사 드리며 작동하지만 실제로 문제가 해결되지는 않습니다. 내 treeviews 메뉴에 일대일 변환을 찾을 수 없습니다; 웬일인지 나는 그것이 존재했다라고 생각하게했다. 내 메뉴에서 코드를 구현했습니다. 건배! – Michael

관련 문제