Получить значение текстового блока внутри кнопки - PullRequest
1 голос
/ 21 ноября 2011

Я пишу приложение для Windows Phone, в графическом интерфейсе есть список со множеством кнопок, что-то вроде этого

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

Мне нужно получить содержимое TextBlock "txtblockUrl", когда я нажимаю кнопку, как я могу получить это значение?

private void Click_B(object sender, RoutedEventArgs e)
        {
            Button source = (Button)e.OriginalSource;

        }

Ответы [ 3 ]

4 голосов
/ 21 ноября 2011

Вы можете пройти по иерархии макетов, как показано ниже

private void Click_B(object sender, RoutedEventArgs e)
{
  string s = ((((sender as Button).Content) as StackPanel).Children[1] as TextBlock).Text;
}

Тем не менее, данные, привязывающие список объектов к вашему ListBox.ItemsSource, являются лучшим решением, чем эта.

1 голос
/ 21 ноября 2011

Возможно, есть гораздо лучшее решение, но если вы хотите напрямую сослаться на него, вы можете просто свернуть вниз.

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

1 голос
/ 21 ноября 2011

Еще один способ увидеть вещи - вы хотите получить значение свойства Name объекта, привязанного к вашей кнопке. Вы можете найти этот объект в свойстве DataContext вашей кнопки.

Если вы замените MyType типом вашего связанного объекта, что-то вроде этого должно делать то, что вы хотите:

private void Click_B(object sender, RoutedEventArgs e)
{
    Button source = (Button)e.OriginalSource;
    string name = ((MyType)source.DataContext).Name;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...