2013-02-14 101 views
3

我有TreeViewHierarchicalDataTemplate。項目填寫正確,但我無法點擊TreeView項目。 (我不能選擇一個,所以標記爲藍色)。 我可以點擊TreeViewItem前面,然後選中標記爲藍色。看起來有一個小盒子,我可以點擊,但不是其餘的。WPF HierarchicalDataTemplate TreeView不可點擊

這裏是我的代碼:

XAML:

<TreeView ItemsSource="{Binding Main.TreeItems}"> 
    <TreeView.ItemTemplate> 
     <HierarchicalDataTemplate ItemsSource="{Binding Path=Children}"> 
      <TreeViewItem Header="{Binding Path=Header}"/> 
     </HierarchicalDataTemplate> 
    </TreeView.ItemTemplate> 
</TreeView> 

型號

public class ITreeItem 
{ 
    public string Header { get; set; } 
    public List<ITreeItem> Children { get; set; } 
} 

class MainModel : INotifyPropertyChanged 
{ 
    private List<ITreeItem> _treeitems; 

    public MainModel() 
    { 
     _treeitems = new List<ITreeItem>(); 

     List<ITreeItem> treeList = new List<ITreeItem>(); 

     ITreeItem myItem1 = new ITreeItem(); 
     myItem1.Header = "Test1"; 
     myItem1.Children = new List<ITreeItem>(); 
     treeList.Add(myItem1); 

     myItem1.Header = "Test2"; 
     myItem1.Children = new List<ITreeItem>(); 
     treeList.Add(myItem1); 

     TreeItems = treeList;   
    } 

    public List<ITreeItem> TreeItems 
    { 
     get 
     { 
      return _treeitems; 
     } 
     set 
     { 
      _treeitems = value; 
      OnPropertyChanged("TreeItems"); 
     } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 

    private void OnPropertyChanged(string propertyName) 
    { 
     PropertyChangedEventHandler handler = PropertyChanged; 

     if (handler != null) 
     { 
      handler(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 
} 
+0

令人驚訝的是,一些示例以我所見過的方式使用TreeViewItem。我一直被困在相同問題的年齡。 – Andez 2014-05-19 13:12:36

回答

10

在您的XAML,而是採用了<TreeViewItem>HierarchicalDataTemplate,請嘗試使用其他控制,例如TextBlock

<TextBlock Text="{Binding Path=Header}"/> 
+0

謝謝。那效果很好。有沒有一種方法可以在xaml中自動擴展項目? – user2025830 2013-02-14 15:00:39

+0

@ user2025830我會這樣做的方式是在你的ITreeItem類中創建一個'bool IsExpanded'屬性,將初始值設置爲'True',並讓該類實現'INotifyPropertyChanged'。然後在你的'Resources'中有一個'Style'來定位'TreeViewItem'。 – Mash 2013-02-14 15:08:02

+0

@ user2025830這裏是樣式: Mash 2013-02-14 15:08:39

0

以前的解決方案避免了這個問題。有一種方法可以使用標題來選擇TreeViewItem:在MSDN網站we can find an example上使用標題和TreeViewItem可點擊。有人有一個想法,爲什麼在這裏是不可能的?

我個人黑了,使用MouseButtonEventHandlerisSelected = false;然後((TreeViewItem)sender).IsSelected = true;上加上foreach但是那很髒。

+0

這是因爲OP使用'ItemTemplate'。當您使用ItemTemplate時,隱式創建。這就解釋了爲什麼即使使用了「TextBlock」也仍然會生成TreeViewItems。使用TextBlock來渲染使用模板的TreeViewItems是常見的做法。 – Mash 2014-04-11 16:52:54