答案 0 :(得分:1)
这是我发现获取selectedTreeViewItem
值的方式,我是从xmlElement
得到的。
考虑这个xaml代码:
<i>
<Window.Resources>
<HierarchicalDataTemplate DataType="Filial"
ItemsSource="{Binding XPath=./*}">
<StackPanel Orientation="Horizontal">
<Image Source="/WpfClient;component/Images/image4.png"
Height="20"></Image>
<TextBlock Margin="5,0,0,0"
Text="{Binding XPath=@name}"
FontSize="18"
FontFamily="BankGothic Md BT"
Foreground="#FF355CE5"/>
</StackPanel>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate DataType="Setor"
ItemsSource="{Binding XPath=./*}">
<StackPanel Orientation="Horizontal">
<TextBlock Margin="5,0,0,0"
Text="{Binding XPath=@name}"
FontWeight="Bold" />
</StackPanel>
</HierarchicalDataTemplate>
<HierarchicalDataTemplate DataType="User">
<StackPanel Orientation="Horizontal">
<Image Source="{Binding XPath=@source}"
Height="15"></Image>
<TextBlock Margin="5,0,0,0"
Text="{Binding XPath=@name}"
FontStyle="Italic" />
</StackPanel>
</HierarchicalDataTemplate>
<XmlDataProvider x:Key="xmlDP"
Source="Contatos.xml"
XPath="/Contatos/Filial"></XmlDataProvider>
</Window.Resources>
<Grid Width="Auto"
Height="Auto">
<TreeView Name="tv"
ItemsSource="{Binding }"
DataContext="{StaticResource xmlDP}"
Margin="0,0,0,0"
TreeViewItem.Selected="tv_Selected">
<TreeView.ItemContainerStyle>
<Style TargetType="TreeViewItem">
<Setter Property="TreeViewItem.IsExpanded"
Value="True" />
</Style>
</TreeView.ItemContainerStyle>
</TreeView>
</Grid>
</i> </pre>
和这个c#codebehind:
private void tv_Selected(object sender, RoutedEventArgs e)
{
System.Xml.XmlElement xmlElement= (XmlElement)tv.SelectedItem;
string mySelectedValue = xmlElement.Attributes[0].Value.ToString();
MessageBox.Show(mySelectedValue , "SelectedTreeValue", MessageBoxButton.OK, MessageBoxImage.Information);
}
</i>
这是xml文件:
<i>
<?xml version="1.0" encoding="utf-8" ?>
<Contatos>
<Filial name="Firm">
<Setor name="Sector 1">
<User name="user1" source="/WpfClient;component/Images/user.png"></User>
<User name="user2" source="/WpfClient;component/Images/user.png"></User>
<User name="user3" source="/WpfClient;component/Images/admin.png"></User>
</Setor>
<Setor name="Sector40">
<User name="user43" source="/WpfClient;component/Images/admin.png"></User>
<User name="user44" source="/WpfClient;component/Images/user.png"></User>
<User name="user45" source="/WpfClient;component/Images/user.png"></User>
<User name="user46" source="/WpfClient;component/Images/user.png"></User>
</Setor>
</Filial>
</Contatos>
</i>
答案 1 :(得分:0)
我无法看到你DoSomething
处理程序发生什么事,我猜它会响应Click
事件。
如果是单击项目模板的元素,则可能无法获得正确的发件人参数。
您可以将发件人转发给UIElement
,然后访问应该是您的XML元素之一的DataContext
。
另一种方法是对treeview的SelectionChanged
事件作出反应,它将在事件参数中为您提供treview项。