Выбор элемента списка внутри таблицы данных - PullRequest
0 голосов
/ 01 сентября 2011

У меня есть список, который использует шаблон данных.Шаблон очень прост и состоит из 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 внутри шаблона данных, когдаЯ нажимаю на него в списке.Я хочу отобразить его в метке где-то еще на странице, но не могу понять, как получить доступ к этому текстовому блоку.

Может ли кто-нибудь помочь и указать мне правильное направление?Я чувствую, что сейчас хожу кругами.

Спасибо за любую помощь.

Ответы [ 2 ]

3 голосов
/ 02 сентября 2011

Поскольку у вас есть ListBox, вы можете использовать выделение, просто назовите ListBox и привяжите его к SelectedItem:

<ListBox Name="lb" ... />
<Label DataContext="{Binding SelectedItem, ElementName=lb}"
       Content="{Binding XPath=@Name}"/>

Это не возвращает текст TextBlock в шаблоне, но получаетэто из того же источника, что и шаблон.(Вы могли бы нацелиться на TextBlock в самом шаблоне, но я бы не рекомендовал его)

0 голосов
/ 01 сентября 2011

Добавьте обработчик события MouseLeftButtonUp к вашему текстовому блоку внутри вашей таблицы данных, например:

<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

...