获取Button内部的textblock值

时间:2011-11-21 16:43:18

标签: c# windows-phone-7 silverlight-4.0 mobile

我正在写一个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;

        }

3 个答案:

答案 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

的快捷方式