我有这样的事情:
<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?
答案 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
。