2013-02-14 2 views
3

У меня есть TreeView с HierarchicalDataTemplate. Элементы заполнены правильно, но я не могу нажать на пункты 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

ответ

10

В вашем XAML, вместо того, чтобы использовать <TreeViewItem> под HierarchicalDataTemplate, попробуйте использовать другой контроль, такой как TextBlock:

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

спасибо. это хорошо работает. есть ли способ автоматического расширения элементов в xaml? – user2025830

+0

@ user2025830 То, как я это сделал, это создать свойство 'bool IsExpanded' в вашем классе' ITreeItem', иметь начальное значение, установленное в 'True', и также реализовать этот класс' INotifyPropertyChanged'. Тогда в вашем 'Resources' есть' Style', который нацелен на 'TreeViewItem'. – Mash

+0

@ user2025830 Вот такой стиль: Mash

0

Предыдущее решение позволяет избежать проблемы. Существует способ использования заголовка для выбора TreeViewItem: на веб-сайте MSDN we can find an example, который использует заголовок и где TreeViewItem можно щелкнуть. У кого-то есть идея, почему здесь это невозможно?

лично я взломал, что с помощью MouseButtonEventHandler добавления foreach на детали с isSelected = false;, а затем ((TreeViewItem)sender).IsSelected = true;, но это грязно.

+0

Это потому, что OP использует 'ItemTemplate'. Когда вы используете ItemTemplate, неявно создается . Это объясняет, почему TreeViewItems все еще сгенерированы, даже если используется «TextBlock». Общепринятой практикой является использование TextBlock для визуализации TreeViewItems, которые используют шаблоны. – Mash

 Смежные вопросы

  • Нет связанных вопросов^_^