我有一个使用数据模板的列表框。模板非常简单,由Image和TextBlock组成。它们都绑定到XML文档。模板如下:
<Window.Resources>
<XmlDataProvider x:Key="NinjaData" Source="\Data\Ninjas.xml" XPath="/Ninjas"/>
<DataTemplate x:Key="NinjaDataTemplate">
<StackPanel>
<StackPanel Orientation="Horizontal" Margin="0">
<Image Source="{Binding XPath=ImageFile}" Margin="5" Width="50"/>
<TextBlock Text="{Binding XPath=@Name}" Margin="5" FontFamily="OCR A Std" Foreground="#FF9114" FontSize="14" Name="NinjaName"/>
</StackPanel>
</StackPanel>
</DataTemplate>
</Window.Resources>
列表框如下:
<ListBox Background="{x:Null}" BorderBrush="{x:Null}"
ItemsSource="{Binding Source={StaticResource NinjaData}, XPath=Ninja}"
ItemTemplate="{StaticResource NinjaDataTemplate}"
>
<ListBox.Resources>
<SolidColorBrush x:Key="{x:Static SystemColors.HighlightBrushKey}" Color="Gray"></SolidColorBrush>
</ListBox.Resources>
<ListBox.Effect>
<DropShadowEffect ShadowDepth="1" Color="#FF282828"/>
</ListBox.Effect>
</ListBox>
当我在列表框中单击时,我无法弄清楚如何在数据模板中检索TextBlock的内容。我想在页面上的其他地方的标签中显示它,但我无法弄清楚如何访问该文本块。
任何人都可以帮助并指出我正确的方向吗?我觉得我现在正在转圈。
感谢您的帮助。
答案 0 :(得分:3)
由于你有一个ListBox,你可以使用选择,只需命名ListBox并绑定到SelectedItem:
<ListBox Name="lb" ... />
<Label DataContext="{Binding SelectedItem, ElementName=lb}"
Content="{Binding XPath=@Name}"/>
这不会检索模板中TextBlock的Text,而是从与模板相同的源获取它。 (你实际上可以在模板中定位TextBlock,但我不推荐它)
答案 1 :(得分:0)
将MouseLeftButtonUp事件处理程序添加到datatemplate内的textblock,如:
<TextBlock Text="{Binding XPath=@Name}" Margin="5" FontFamily="OCR A Std" Foreground="#FF9114" FontSize="14" Name="NinjaName" MouseLeftButtonUp="TextBlock_MouseLeftButtonUp"/>
现在您的 TextBlock_MouseLeftButtonUp 应如下所示:
private void TextBlock_MouseLeftButtonUp(object sender, MouseButtonEventArgs e)
{
TextBlock txt = sender as TextBlock;
}
现在做任何你喜欢的 txt