2010-12-01 4 views
2

Il existe de nombreux exemples démontrant cela dans XAML, telles que les suivantes:icône Ajouter à WPF TreeViewItem lors de l'exécution

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

</TreeViewItem> 

Mais je dois le faire dans le code d'exécution - dans le but de TreeView est d'afficher les fichiers et dossiers sur l'ordinateur.

Je ne suis pas sûr de savoir comment travailler avec en-tête dans le code:

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 

Quelqu'un peut-il démontrer le concept s'il vous plaît?

EDIT: Je pense que je comprends, je devrais utiliser StackPanel horizontal avec deux contrôles séparés - TextBlock et Image. Est-ce la bonne approche?

Répondre

2

.

Voici l'exemple de code pour savoir comment démarrer. Comprenez-le d'abord, puis faites les changements appropriés pour répondre à vos besoins. Le code écrit en C# et XAML. J'espère que vous comprendrez C# et que vous pourrez le convertir en Basic.

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

Et voici le code XAML:

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

Hope, cet exemple de code vous aiderait grandement. :-)

.

Questions connexes