2013-06-02 3 views
2

나중에 TreeView에 추가 할 TreeViewitems을 만드는 데이 코드가 있습니다. 이것은 모두 프로그래밍 방식으로 수행됩니다.프로그래밍 방식으로 이미지가있는 TreeviewItem

TreeViewItem tvi = new TreeViewItem { 
             Header = ni.name, 
             Uid = itemName, 
             Background = color 
            }; 

I 싶어 프로그래밍 TreeViewItems에 대한 아이콘으로 이미지를 추가 할 수 있습니다. 나는 이것을하고 있지만 TreeView에서 볼 수있는 것은 System.Windows.Controls.StackPanel이라는 항목이 이상하다. 또한 표시된 이미지가 없습니다. 내 코드에서 이것을 사용하고 있습니다. 도와주세요 :

TreeViewItem tvi = new TreeViewItem 
{ 
    Header = new System.Windows.Controls.StackPanel 
    { 
     Children = 
     { 
      new System.Windows.Controls.Image{Source = b}, 
      new System.Windows.Controls.TextBlock 
      { 
       Text = ni.name 
      } 
     } 
    }, 

    Uid = itemName, 
    Background = color 
}; 

나는 또한 XAML based 접근 방식을 시도했습니다. 대신 이전처럼 TVI를 추가

<TreeView ItemsSource="{Binding}" Grid.Row="1" Grid.Column="0" Name="TreeView1" HorizontalAlignment="Stretch" VerticalAlignment="Stretch" TreeViewItem.Selected="TreeViewItem_OnItemSelected"> 
    <TreeView.ItemTemplate> 
     <DataTemplate> 
      <StackPanel Orientation="Horizontal"> 
       <TextBlock Text="{Binding Path= iName}" Margin="5,0" />  
      </StackPanel> 
     </DataTemplate> 
    </TreeView.ItemTemplate> 
</TreeView> 

, 내가 이렇게 : XAML 아래처럼 내 XAML based 접근 방식은 보이는

TreeItem 클래스는 다음과 같습니다
// node.Items.Add(tvi); //for non-xaml approach 
var ti = new TreeItem { iName = ni.name}; 
node.Items.Add(ti); 

:

namespace DeveloperTool 
{ 
    public class TreeItem 
    { 
     public string iName 
     { 
      get; set; 
     }  
    } 
} 

도에 대한 내가 사용하는이 방법은 DeveloperTool이라는 TreeViewItems입니다. TreeItem 대신 실제 이름을 바인딩합니다. 간단히하기 위해 나는 단지 TextBlock 먼저 시도했다 (이미지 제외). 누군가 내가 여기서 잘못하고있는 것을 복습 해 주실 수 있습니까? 두 가지 접근 방식 모두 같은 종류의 상황을 초래합니다.

답변

1

샘플을 기반으로 한 문제는 헤더 템플릿이 필요하다는 것입니다. 이 스 니펫을 TreeView 선언에 추가하십시오 ...

 <TreeView.Resources> 
      <Style TargetType="{x:Type TreeViewItem}"> 
       <Setter Property="HeaderTemplate"> 
        <Setter.Value> 
         <DataTemplate> 
          <StackPanel Orientation="Horizontal"> 
           <Image Margin="2" Source="{Binding ...}"/> 
           <TextBlock Text="{Binding}"></TextBlock> 
          </StackPanel> 
         </DataTemplate> 
        </Setter.Value> 
       </Setter> 
      </Style> 
     </TreeView.Resources> 

이렇게하면 바인딩 할 수있는 HeaderTemplate이 제공됩니다. 물론이 스 니펫을 컴파일하고 작동 시키려면 올바른 바인딩 기능을 추가해야하지만 그렇지 않으면 기존 코드의 대부분을 복구 할 수 있습니다.

+0

그래서 나는 itemtemplate을 제거하고 대신 리소스에서 사용해야합니까? –

+0

예, 게시 된 Xaml은 HeaderTemplate 속성을 설정하며 사용자가 게시 한 코드와 Xaml을 기반으로합니다. –

+0

감사합니다. 그 일을했습니다. 제 일을 만들기 위해 더 많은 질문이 있지만, 그것에 관한 또 다른 질문을 게시하는 것이 좋습니다. –