<?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...");
        }