今天想做一个文件浏览器,想把选中项的信息提取出来,就自然而然的想到用treeview,但是当给每个treeviewitem添加selected事件后,当你选中的是儿子结点的时候,父亲节点的selected也会触发。
//xmal代码
<TreeView Grid.Row="3" Grid.Column="0" >
<TreeViewItem Header="父亲" Selected="TreeViewItem_Selected">
<TreeViewItem Header="儿子" Selected="TreeViewItem_Selected" >
<TreeViewItem Header="孙子">
<TreeViewItem Header="曾孙"></TreeViewItem>
</TreeViewItem>
</TreeViewItem>
</TreeViewItem>
<TreeViewItem Header="叔叔">
</TreeViewItem>
</TreeView>
//事件
private void TreeViewItem_Selected(object sender, RoutedEventArgs e)
{
var demo = (TreeViewItem)sender;
Console.WriteLine(demo.Header);
}
正确的做法是 :
<TreeView Grid.Row="3" Grid.Column="0" SelectedItemChanged="TreeView_SelectedItemChanged">
在Treeview里添加SelectedItemChanged;
SelectedItemChanged(object sender, RoutedPropertyChangedEventArgs<object> e)
参数 e 是一个结构体,里面的 oldvalue 指的是之前的selecteditem,newvalue指的是现在的选择的selecteditem; 把newvalue强制转换成treeviewitem就行了;