【发布时间】:2016-07-08 03:21:41
【问题描述】:
如何访问正在展开的 TreeViewItem(或者更确切地说是对象)?在我看来,事件处理程序的“发送者”应该是 TreeViewItem 而不是 TreeView。我想在展开时对绑定到 TreeViewItem 的对象进行操作。
<Window x:Class="MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525"
Loaded="Window_Loaded">
<StackPanel>
<TreeView x:Name="treeView" HorizontalAlignment="Left" VerticalAlignment="Top"
TreeViewItem.Expanded="treeViewItem_Expanded" >
<TreeView.ItemTemplate>
<HierarchicalDataTemplate ItemsSource="{Binding}">
<StackPanel Orientation="Horizontal">
<TextBlock Text="{Binding Name}" />
</StackPanel>
</HierarchicalDataTemplate>
</TreeView.ItemTemplate>
</TreeView>
</StackPanel>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
private void Window_Loaded(object sender, RoutedEventArgs e)
{
Element root = new Element() { Name = "root" };
Element a1 = new Element() { Name = "a1" };
Element a2 = new Element() { Name = "a2" };
Element b1 = new Element() { Name = "b2" };
root.Add(a1);
root.Add(a2);
a2.Add(b1);
treeView.ItemsSource = root;
}
private void treeViewItem_Expanded(object sender, RoutedEventArgs e)
{
TreeViewItem tvi = sender as TreeViewItem;
tvi = e.Source as TreeViewItem;
TreeView tv = sender as TreeView;
}
public interface IElement
{
string Name { get; set; }
}
public class Element : ObservableCollection<IElement>, IElement
{
public string Name { get; set; }
}
}
【问题讨论】:
-
e.OriginalSource实际上是一个 TreeViewItem。