2012-02-29 3 views
1

패널에 내 TreeView 표시 항목을 만드는 방법을 찾고 있습니다.TreeView.ItemsPanel을 캔버스 만들기

<TreeView> 
    <TreeView.ItemsPanel> 
     <ItemsPanelTemplate> 
      <Canvas IsItemsHost="True"/> 
     </ItemsPanelTemplate> 
    </TreeView.ItemsPanel> 
    <TreeViewItem Header="Root" IsExpanded="True" Canvas.Left="50" Canvas.Top="20"> 
     <TreeViewItem Header="Alpha" Canvas.Left="10" Canvas.Top="50"> 
      <TreeViewItem Header="Sub"/> 
     </TreeViewItem> 
     <TreeViewItem Header="Beta"/> 
     <TreeViewItem Header="Gamma"/> 
    </TreeViewItem> 
</TreeView> 

이 솔루션은 나를 루트 TreeViewItem 주위를 이동할 수 있습니다,하지만 난 TreeView의 모든 단일 항목이 Canvas 연결된 속성을 존중합니다. 나가 말하고 싶은 것은, 루트 {왼쪽 = 50, 상위 = 10} (여기서 작동)은 알파 {왼쪽 = 0, 상위 = 0}, 루트는 [50,10], 알파는 [0,0 ] (좌표는 Canvas까지 절대 값입니다.)

루트 TreeViewItem 만 올바르게 배치하는 이유는 TreeView.ItemsPanel입니다. 나는 대신 TreeView.ItemContainerStyle을 사용해야한다고 생각하지만 실제로 어떻게해야할지 모르겠다.

물론 도움이된다면 HierarchicalDataTemplate을 통합하는 것이 좋습니다. Binding과 솔루션을 연결하는 방법을 알고 있습니다.

+0

'ItemsControl'대신 'TreeView'를 사용하는 특별한 이유가 있습니까? – Rachel

+0

네,'HierarchicalDataTemplate'을 사용하고 싶습니다. 그리고 인터넷에서 찾은 것으로부터'TreeView' 만 사용하고 있습니다. 하지만이 작업을 할 수있는 방법이 있다면'ItemsControl'과 함께 기꺼이 갈 것입니다. –

+0

TreeView의 데이터 객체가 모두 동일한 유형입니까? 만약 그렇다면'HierarchicalDataTemplate' 대신 Implicit'DataTemplate'을 사용할 수 있습니다. – Rachel

답변

3

TreeViewItems 각각 자신의 패널이 있으므로 TreeView 및 항목에서 캔버스를 변경해야합니다. 이렇게하려면 리소스를 통해 암시 적으로 패널을 변경하는 스타일을 적용하거나 ItemContainerStyle을 적용하십시오.

<Style TargetType="TreeViewItem"> 
    <Setter Property="ItemsPanel"> 
     <Setter.Value> 
      <TreeViewItem.ItemsPanel> 
       <ItemsPanelTemplate> 
        <Canvas /> 
       </ItemsPanelTemplate> 
      </TreeViewItem.ItemsPanel> 
     </Setter.Value> 
    </Setter> 
</Style>