отмена выбора и повторный выбор TreeViewItem в TreeView - PullRequest
1 голос
/ 22 марта 2011

У меня следующая проблема:

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

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

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

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

1 Ответ

3 голосов
/ 22 марта 2011

после установки 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();
        }
    }

Вы написали focus (), но это не решает вашу проблему.Где вы вызываете свой deselectAll ()?

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

ps: не забудьте пометить ответ как ответчик.

...