c#在WinPhone 7 silverlight应用程序中查找文本框

时间:2011-08-01 07:41:43

标签: c# silverlight windows-phone-7

我有这样的事情:

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

在每个文本块上我都有一个手势监听器,它应该为用户提供更改“名称”的选项,因此当他们按住文本块时,应用程序会将他导航到另一个填写表单的页面。

我的问题是当我点击并按住另一个texblock时,如何找到绑定'name'的texblock?

2 个答案:

答案 0 :(得分:1)

您可以使用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" />

然后,当您点击其他一个TextBlock时,您可以按如下方式找到它:

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

// locate the names TextBlock
var nameTextBlock = parentStackPanel.Elements()
                                    .Where(el => el.Name == "NameText").Single();

答案 1 :(得分:0)

sender方法中投放GestureListenerHold