<?xml version="1.0" encoding="UTF-8"?>
private TreeViewItem FindTreeViewItem ( ItemsControl container , object item )
{
if ( null == container || null == item )
{
return null ;
}
if ( container . DataContext == item )
{
return container as TreeViewItem ;
}
int count = container . Items . Count ;
for ( int i = 0; i < count ; i ++)
{
TreeViewItem subContainer = ( TreeViewItem ) container . ItemContainerGenerator . ContainerFromIndex ( i );
if ( null == subContainer )
{
continue ;
}
// Search the next level for the object.
TreeViewItem resultContainer = FindTreeViewItem ( subContainer , item );
if ( null != resultContainer )
{
return resultContainer ;
}
}
return null ;
}
/使用上述方法遍历 , 然后设置IsSelected属性
private static void SelectedItemChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
//
SelectedProtocolControl spc = d as SelectedProtocolControl;
if (null != spc)
{
if (e.NewValue != spc.trvSelectedProtocol.SelectedItem)
{
//TreeViewItem tviNew = spc.trvSelectedProtocol.ItemContainerGenerator.ContainerFromItem(e.NewValue) as TreeViewItem;
TreeViewItem tviNew = spc.FindTreeViewItem(spc.trvSelectedProtocol, e.NewValue);
if (null != tviNew)
{
tviNew.IsSelected = true;
}
}
if (null != e.OldValue)
{
//TreeViewItem tviOld = spc.trvSelectedProtocol.ItemContainerGenerator.ContainerFromItem(e.OldValue) as TreeViewItem;
TreeViewItem tviOld = spc.FindTreeViewItem(spc.trvSelectedProtocol, e.OldValue);
if (null != tviOld)
{
tviOld.IsSelected = false;
}
}
}
System.Diagnostics.Debug.WriteLine("SelectedItemChanged...");
}