如何检索填充 WPF Treeview 的对象?
How do I retrieve the objects with which a WPF Treeview was populated?
我有一个绑定到简单节点的树视图,每个节点包含两个字符串 (Expression, Exp2) 和一个节点列表 (Children)。
我还这样做了,以便当双击特定的文本框时,它会引发一个给我一个 TreeViewItem 的事件。
如何从那里到达创建 TreeViewItem 的节点?[=11=]
<TreeView x:Name="treeView" VerticalAlignment="Top" HorizontalAlignment="Left" Margin="20,80,20,20">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate DataType="{x:Type local:Node}"
ItemsSource="{Binding Children}">
<Grid>
<TextBlock Text="{Binding Expression}"/>
<!--<TextBlock Text="{Binding Exp2}"/>-->
</Grid>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<EventSetter Event="MouseDoubleClick" Handler="TreeViewItem_MouseDoubleClick"/>
</Style>
</TreeView.ItemContainerStyle>
</TreeView>
private void TreeViewItem_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
if(sender is TreeViewItem)
{
if (!((TreeViewItem)sender).IsSelected)
{
return;
}
TreeViewItem item = (TreeViewItem)sender;
//???
//Profit
}
}
好的,这很复杂。
获取 TreeViewItem 的父项(作为 ItemsControl
)
var parent = ItemsControl.ItemsControlFromItemContainer(item);
然后使用parent的ItemContainerGenerator
得到这样的数据:
var node = parent?.ItemContainerGenerator?.ItemFromContainer(item);
我有一个绑定到简单节点的树视图,每个节点包含两个字符串 (Expression, Exp2) 和一个节点列表 (Children)。
我还这样做了,以便当双击特定的文本框时,它会引发一个给我一个 TreeViewItem 的事件。
如何从那里到达创建 TreeViewItem 的节点?[=11=]
<TreeView x:Name="treeView" VerticalAlignment="Top" HorizontalAlignment="Left" Margin="20,80,20,20">
<TreeView.ItemTemplate>
<HierarchicalDataTemplate DataType="{x:Type local:Node}"
ItemsSource="{Binding Children}">
<Grid>
<TextBlock Text="{Binding Expression}"/>
<!--<TextBlock Text="{Binding Exp2}"/>-->
</Grid>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
<TreeView.ItemContainerStyle>
<Style TargetType="{x:Type TreeViewItem}">
<EventSetter Event="MouseDoubleClick" Handler="TreeViewItem_MouseDoubleClick"/>
</Style>
</TreeView.ItemContainerStyle>
</TreeView>
private void TreeViewItem_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
if(sender is TreeViewItem)
{
if (!((TreeViewItem)sender).IsSelected)
{
return;
}
TreeViewItem item = (TreeViewItem)sender;
//???
//Profit
}
}
好的,这很复杂。
获取 TreeViewItem 的父项(作为
ItemsControl
)var parent = ItemsControl.ItemsControlFromItemContainer(item);
然后使用parent的
ItemContainerGenerator
得到这样的数据:var node = parent?.ItemContainerGenerator?.ItemFromContainer(item);