У меня есть дерево, связанное с деревом объектов. Когда я удаляю объект из дерева объектов, он корректно удаляется из древовидного представления, но поведение по умолчанию для древовидной структуры состоит в том, чтобы перетащить выбранный элемент до родительского узла удаленного элемента. Как я могу изменить это, чтобы вместо этого перейти к следующему элементу?WPF treeview itemselected перемещается неправильно при удалении элемента
EDIT:
Я обновил свой код с предложением Aviad в. Вот мой код ..
public class ModifiedTreeView : TreeView
{
protected override void OnItemsChanged(NotifyCollectionChangedEventArgs e)
{
base.OnItemsChanged(e);
if (e.Action == NotifyCollectionChangedAction.Remove)
{
if (e.OldStartingIndex - 1 > 0)
{
ModifiedTreeViewItem item =
this.ItemContainerGenerator.ContainerFromIndex(
e.OldStartingIndex - 2) as ModifiedTreeViewItem;
item.IsSelected = true;
}
}
}
protected override DependencyObject GetContainerForItemOverride()
{
return new ModifiedTreeViewItem();
}
protected override bool IsItemItsOwnContainerOverride(object item)
{
return item is ModifiedTreeViewItem;
}
}
public class ModifiedTreeViewItem : TreeViewItem
{
protected override void OnItemsChanged(NotifyCollectionChangedEventArgs e)
{
base.OnItemsChanged(e);
if (e.Action == NotifyCollectionChangedAction.Remove)
{
if (e.OldStartingIndex > 0)
{
ModifiedTreeViewItem item =
this.ItemContainerGenerator.ContainerFromIndex(
e.OldStartingIndex - 1) as ModifiedTreeViewItem;
item.IsSelected = true;
}
}
}
protected override DependencyObject GetContainerForItemOverride()
{
return new ModifiedTreeViewItem();
}
protected override bool IsItemItsOwnContainerOverride(object item)
{
return item is ModifiedTreeViewItem;
}
}
Код выше не работает, если я не отлаживать его, или каким-то образом замедлить OnItemsChanged метод. Например, если я помещаю thread.sleep (500) в нижней части метода OnItemsChanged, он работает, иначе это не так. Любая идея, что я делаю неправильно? Это действительно странно.
Вместо 'item.IsSelected = истина;' 'попробовать this.SelectedItem = this.ItemContainerGenerator.ItemFromContainer (пункт);' –
Свойство SelectedItem только для чтения, и не доступен вообще в типе TreeViewItem , Спасибо за вашу помощь. Я думаю, что ваше первое предложение, вероятно, правильно. У меня такое чувство, что это может быть ошибка WPF. – 2010-01-13 16:16:43