2013-06-02 45 views
2

我有这个代码来创建TreeViewitems,我后来将其添加到TreeView。这全部以编程方式完成。Treeviewitem以编程方式与图像

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

我想以编程方式添加图像作为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的方法。我XAML based方法看起来像下面 XAML

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

而不是增加TVI像早期的,我这样做:

// node.Items.Add(tvi); //for non-xaml approach 
var ti = new TreeItem { iName = ni.name}; 
node.Items.Add(ti); 

TreeItem类看起来是这样的:

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

即使我使用这种方法,我看到TreeViewItems的名称为DeveloperToolTreeItem而不是我绑定的实际名称。为了简单起见,我只是先尝试​​了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

谢谢。这是做了它。我有更多的问题让我的工作,但它可能是一个好主意,发布有关它的另一个问题。 –

相关问题