2011-03-22 3 views
1

У меня следующая проблема:и отменить выбор повторного выбора TreeViewItem в TreeView

В моей TreeView я добавил функциональность отменить выбор, позвонив мой собственный Отменить() - метод, когда пользователь нажимает на TreeView, но не TreeViewItem. Вот мой метод TreeView:

public void deselectAll() 
{ 
    TreeViewItem item = SelectedItem as TreeViewItem; 
    if (item != null) 
    { 
     this.Focus(); 
     item.IsSelected = false; 
    } 
} 

Моя проблема в том, что я не могу повторно в TreeViewItem после я Unselected его. Я читал, что фокусировка на TreeView сама должна решить эту проблему, но это не так. Также не имеет значения, поставил ли я «Focus()» перед или после «IsSelected = false».

У кого-нибудь есть идея, почему это не работает? Любые мысли были бы оценены.

ответ

3

после того, как вы установили item.IsSelected = false; вам нужно вызвать .Focus() для вашего дерева.

 <TreeView MouseLeftButtonDown="TreeView_MouseLeftButtonDown"> 
      <TreeViewItem Header="Employee1"> 
       <TreeViewItem Header="Jesper"/> 
       <TreeViewItem Header="Aaberg"/> 
       <TreeViewItem Header="12345"/> 
      </TreeViewItem> 
      <TreeViewItem Header="Employee2"> 
       <TreeViewItem Header="Dominik"/> 
       <TreeViewItem Header="Paiha"/> 
       <TreeViewItem Header="98765"/> 
      </TreeViewItem> 
     </TreeView> 

    private void TreeView_MouseLeftButtonDown(object sender, MouseButtonEventArgs e) 
    { 
     var tv = sender as TreeView; 

     if (tv != null) 
     { 
      var item = (TreeViewItem)tv.SelectedItem; 
      item.IsSelected = false; 
      tv.Focus(); 
     } 
    } 

Вы писали() Не решайте свою проблему. где вы называете ваш deselectAll()?

В качестве обходного пути вы можете использовать MouseLeftDown для установки выбранного элемента.

ps: не забывайте отмечать ответ как anwser.

+0

благодарит за быстрый ответ! как я уже сказал, настройка фокуса после установки свойства IsSelected на false, к сожалению, не решает мою проблему. Я вызываю метод deselectAll() в моем TreeView.MouseLeftButtonDown-Eventhandler. Но обходной путь работал очень хорошо. еще раз спасибо! – Yellow