我正在写一个Windows Phone应用程序,在GUI中有一个带有许多按钮的列表框,就像这样
<ListBox x:Name="List">
<ListBox.ItemTemplate>
<DataTemplate>
<Button Width="460" Height="100" Click="Click_B">
<Button.Content>
<StackPanel Orientation="Horizontal" Height="80" Width="400">
<TextBlock Width="200" Name="txtblockName" FontSize="22" Text="{Binding Name}" Height="40"/>
<TextBlock Width="200" Name="txtblockUrl" FontSize="22" Text="{Binding Url}" Height="40"/>
</StackPanel>
</Button.Content>
</Button>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
当我点击Button时,我需要获取TextBlock“txtblockUrl”的内容,我该如何获得这个值?
private void Click_B(object sender, RoutedEventArgs e)
{
Button source = (Button)e.OriginalSource;
}
答案 0 :(得分:4)
您可以沿着布局层次结构向下走,如下所示
private void Click_B(object sender, RoutedEventArgs e)
{
string s = ((((sender as Button).Content) as StackPanel).Children[1] as TextBlock).Text;
}
但是,将对象列表绑定到ListBox.ItemsSource
的数据是比这更好的解决方案。
答案 1 :(得分:1)
查看内容的另一种方法是,您希望获取绑定到按钮的对象的Name
属性的值。您可以在按钮的DataContext
属性中找到此对象。
如果用绑定对象的类型替换MyType
,这样的事情应该做你想做的事情:
private void Click_B(object sender, RoutedEventArgs e)
{
Button source = (Button)e.OriginalSource;
string name = ((MyType)source.DataContext).Name;
}
答案 2 :(得分:1)
可能有一个更好的解决方案,但是如果你想直接引用它,你可以放弃。
private void Click_B(object sender, RoutedEventArgs e)
{
Button source = (Button)e.OriginalSource;
StackPanel stp = source.Content as StackPanel;
TextBlock blk = stp.Children[1];
//Whatever you needed could now reference blk.Text
}
编辑:我会使用上面的数据绑定解决方案。这只是访问TextBlock
的快捷方式