2013-01-18 13 views
1

我正在玩WPF TreeView控件並面臨奇怪的問題。 當我添加的TreeView項編程所有的工作是正確的,但如果我已經通過具有約束力的補充項目 - 我有差距的項目在頭:在TreeView控件中移動標題文本

enter image description here

而且,這種差距是隻有一個「敏感」的一部分TreeItem的行。我不能通過點擊文本來選擇項目,只有當我點擊空白區域時才能選擇它。 這裏是我的代碼:

namespace WPFTreeViewExperience 
{ 
    /// <summary> 
    /// Data item interface 
    /// </summary> 
    public interface IMyTree 
    { 
     string Title { get; set; } 
     List<IMyTree> Items { get; set; } 
    } 

    /// <summary> 
    /// Hierarchical data model 
    /// </summary> 
    public class MyTreeLevel : IMyTree 
    { 
     public string Title { get; set; } 

     public List<IMyTree> Items { get; set; } 

     public MyTreeLevel(string Title, params MyTreeLevel[] Items) 
     { 
      this.Title = Title; 

      this.Items = new List<IMyTree>(); 

      foreach (MyTreeLevel item in Items) 
      { 
       this.Items.Add(item); 
      } 
     } 
    } 

    /// <summary> 
    /// Viewmodel 
    /// </summary> 
    public class MyTreeViewModel : INotifyPropertyChanged 
    { 

     private void NotifyChanges(string PropName) 
     { 
      if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(PropName)); 
     } 
    } 

    private List<MyTreeLevel> _Tree; 

    public List<MyTreeLevel> MyTree 
    { 
     get 
     { 
      return _Tree; 
     } 

     set 
     { 
      _Tree = value; 
      NotifyChanges("MyTree"); 
     } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 

    public MyTreeViewModel() 
    { 
     List<MyTreeLevel> simpleTree = new List<MyTreeLevel>(); 

      simpleTree.Add(new MyTreeLevel("1-0", new MyTreeLevel("1-1"), 
              new MyTreeLevel("1-2", 
                   new MyTreeLevel("1-2-1"), 
                   new MyTreeLevel("1-2-2") 
                   ), 
              new MyTreeLevel("1-3"))); 

      simpleTree.Add(new MyTreeLevel("2-0", new MyTreeLevel("2-1"), 
              new MyTreeLevel("2-2", 
                   new MyTreeLevel("2-2-1"), 
                   new MyTreeLevel("2-2-2"), 
              new MyTreeLevel("2-3")))); 

      MyTree = simpleTree; 
     } 
    } 

    /// <summary> 
    /// Interaction logic for MainWindow.xaml 
    /// </summary> 
     public partial class MainWindow : Window 
     {   
      public MainWindow() 
      { 
       InitializeComponent(); 

       TreeExample.DataContext = new MyTreeViewModel(); 
      } 
     } 
    } 

和我的XAML代碼:

<Window x:Class="WPFTreeViewExperience.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:local="clr-namespace:WPFTreeViewExperience" 
     Title="MainWindow" Height="350" Width="525"> 
    <Grid> 
     <TreeView Name="TreeExample" ItemsSource="{Binding MyTree}"> 
      <TreeView.ItemTemplate> 
       <HierarchicalDataTemplate ItemsSource="{Binding Items}" DataType="{x:Type local:MyTreeLevel}"> 
        <TreeViewItem Header="{Binding Title}"/> 
       </HierarchicalDataTemplate> 
      </TreeView.ItemTemplate> 
     </TreeView>   
    </Grid> 
</Window> 

什麼是錯我的綁定?

回答

2

我認爲的ItemTemplate應該是這樣的:

<HierarchicalDataTemplate ItemsSource="{Binding Items}" DataType="{x:Type local:MyTreeLevel}"> 
     <Grid> 
      <TextBlock Margin="0" Text="{Binding Path=Title}" /> 
     </Grid> 
    </HierarchicalDataTemplate> 
+0

這是工作!但它也沒有'Grid'工作。你能解釋一下你計劃實現的Grid標籤的訣竅嗎? –

+1

是的,它在沒有網格的情況下工作。如果我想添加其他東西,我使用Grid。圖標,例如 – chameleon86