c # найти текстовое поле в приложении WinPhone7 silverlight - PullRequest
1 голос
/ 01 августа 2011

У меня есть что-то вроде этого:

 <ListBox Height="456" Margin="30,113,0,0" x:Name="listBox1" Width="446"  Background="Black">
            <ListBox.ItemTemplate>
            <DataTemplate>
                <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28" Orientation="Horizontal">
                    <TextBlock  Text="{Binding name}" FontSize="28" Padding="10" >
                       <toolkit:GestureService.GestureListener>  
                            <toolkit:GestureListener 
                                Hold="GestureListenerHold"      />
                    </toolkit:GestureService.GestureListener>

                    </TextBlock>
                    <TextBlock Text="{Binding id}" FontSize="24" Padding="10" >
                        <toolkit:GestureService.GestureListener>  
                            <toolkit:GestureListener 
                                Hold="GestureListenerHold"      />
                    </toolkit:GestureService.GestureListener>
                    </TextBlock>
                    <TextBlock Text="{Binding status}" FontSize="24" Padding="10">
                        <toolkit:GestureService.GestureListener>  
                            <toolkit:GestureListener 
                                Hold="GestureListenerHold"      />
                    </toolkit:GestureService.GestureListener>
                    </TextBlock>
                </StackPanel>


            </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>

и в моем приложении я делаю:

   data = (List<Device>)serializer.Deserialize(stream);
                       this.listBox1.ItemsSource = data;

на каждом текстовом блоке У меня есть слушатель жестов, который должен предоставить пользователю возможностьизменить «имя», поэтому, когда они держат текстовый блок, приложение перемещает его на другую страницу, где он заполняет форму.

Мой вопрос: как найти техблок, который связывает «имя», когда я нажимаю и удерживаю другой техблок?

Ответы [ 2 ]

1 голос
/ 01 августа 2011

Вы можете использовать Linq-to-VisualTree, утилиту, которую я написал, которая позволяет вам перемещаться по визуальному дереву:

http://www.scottlogic.co.uk/blog/colin/2010/03/linq-to-visual-tree/

Во-первых, назовите TextBlock так, чтобыон может быть однозначно идентифицирован:

<TextBlock  x:Name="NameText" Text="{Binding name}" FontSize="28" Padding="10" />

Затем, когда один из ваших других текстовых блоков будет нажат, вы можете найти его следующим образом:

// locate the parent stackpanel
var parentStackPanel = tappedTextBlock.Ancestors().First()

// locate the names TextBlock
var nameTextBlock = parentStackPanel.Elements()
                                    .Where(el => el.Name == "NameText").Single();
0 голосов
/ 01 августа 2011

Приведите sender в методе GestureListenerHold.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...