展開されているTreeViewItem(またはオブジェクト)にアクセスするにはどうすればよいですか?私の見積もりでは、イベントハンドラからの "送信者"はTreeViewItemでなくTreeViewでなければなりません。私は、TreeViewItemが展開されているときにバインドされたオブジェクトに作用したいと思います。なぜWPF TreeViewItem.Expanded "送信者"がTreeViewItemではなくTreeViewを渡すのですか?
<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'はツリービューアイテムであり、実際に – icebat
@icebatありがとう! –