2010-12-01 5 views
2

는 다음과 같은 XAML이을 보여주는 많은 샘플이 있습니다 :런타임에 WPF TreeViewItem에 아이콘을 추가

<TreeViewItem> 
<TreeViewItem.Header> 
<StackPanel Orientation="Horizontal"> 
<Image Source="..."/> 
<TextBlock>Hello</TextBlock> 
</StackPanel> 
</TreeViewItem.Header> 

</TreeViewItem> 

하지만 런타임 코드에서이 작업을 수행 할 필요가 - 트 리뷰의 목적이 파일을 표시하는 것입니다 컴퓨터의 폴더

For Each f In directory.GetFiles() 

     Dim icon = System.Drawing.Icon.ExtractAssociatedIcon(f.FullName) 
     Dim name As String = f.Name  

     Dim item As New TreeViewItem 
     item.Header = ... 


Next 

사람이 개념을 설명 할 수하십시오

그래서 나는 코드에서 헤더와 함께 작동하는 방법을 잘 모르겠어요?

편집 : 나는 그것을 얻고 있다고 생각하는데, 나는 2 개의 별도 컨트롤 인 TextBlock과 Image로 수평 StackPanel을 사용해야한다. 이것이 올바른 접근 방법입니까?

답변

2

.

다음은 시작하는 방법에 대한 샘플 코드입니다. 이를 먼저 이해하고 필요에 맞게 적절히 변경하십시오. C# 및 XAML로 작성된 코드입니다. C#을 이해하고 Basic으로 변환 할 수 있기를 바랍니다.

<TreeView ItemsSource="{Binding}"> 
     <TreeView.ItemTemplate> 
      <DataTemplate> 
       <StackPanel Orientation="Horizontal"> 
        <Image Source="{Binding IconSource}"/> 
        <TextBlock Text="{Binding Name}"/> 
       </StackPanel> 
      </DataTemplate> 
     </TreeView.ItemTemplate> 
    </TreeView> 

희망,이 샘플 코드는 크게 도움이 될 : 여기

public class NameIconPair 
    { 
     public String Name { get; set; } 
     public BitmapSource IconSource { get; set; } 
    } 

    public partial class Window1 : Window 
    { 
     public Window1() 
     { 
      InitializeComponent(); 

      var files = System.IO.Directory.GetFiles("E:\\"); 
      ObservableCollection<NameIconPair> pairs = new ObservableCollection<NameIconPair>(); 
      foreach (string file in files) 
      { 
       System.Drawing.Icon icon = System.Drawing.Icon.ExtractAssociatedIcon(file); 
       Stream stream = new MemoryStream(); 
       icon.Save(stream); 
       BitmapDecoder decoder = IconBitmapDecoder.Create(stream, BitmapCreateOptions.None, BitmapCacheOption.None); 
       BitmapSource src = decoder.Frames[0]; 
       pairs.Add(new NameIconPair() { Name = file, IconSource = src }); 
      } 
      this.DataContext = pairs; 
     } 
    } 

그리고

는 XAML 코드입니다. :-)

.

관련 문제