在以下XAML中,TextBlock
中选择了LongListMultiSelector
时,TextBlock
停止接收Tap
事件(以及任何其他手势事件),但在我改为未选中时再次点击它。如何更改此行为,以使TextBlock
始终响应Tap
而不管其选择状态如何?
<toolkit:LongListMultiSelector ItemsSource="{Binding Items}">
<toolkit:LongListMultiSelector.ItemTemplate>
<DataTemplate>
<!-- When TextBlock is selected, Debug_WriteLine_Tapped does not get called -->
<TextBlock Text="{Binding name}" Tap="Debug_WriteLine_Tapped" />
</DataTemplate>
</toolkit:LongListMultiSelector.ItemTemplate>
</toolkit:LongListMultiSelector>
基本上我正在寻找的是一种类似于标准邮件应用程序的行为,在选择了一堆字母之后,他们仍然收到Tap
个事件,因为我仍然可以展开/折叠它们中的任何一个(除了我的情况是一个简单的TextBlock
而不是ExpanderView
s。
答案 0 :(得分:0)
在我的机器上正常工作。当我点击这3个项目时,我在调试日志中收到了预期的消息。
<phone:LongListSelector ItemsSource="{Binding}">
<phone:LongListSelector.ItemTemplate>
<DataTemplate>
<Grid >
<TextBlock Text="{Binding}" Tap="TextBlock_Tap_1" />
</Grid>
</DataTemplate>
</phone:LongListSelector.ItemTemplate>
</phone:LongListSelector>
private void MainPage_Loaded(object sender, RoutedEventArgs e)
{
this.DataContext = "Foo Bar Baz".Split(' ');
}
private void TextBlock_Tap_1(object sender, GestureEventArgs e)
{
Debug.WriteLine("TextBlock_Tap_1");
}
根据您的场景,WP8会公开可能有用的UseOptimizedManipulationRouting属性。设置UseOptimizedManipulationRouting = false会导致LongListSelector,Pivot和其他控件不会吞下嵌套控件的事件。设置它的好地方是在LongListSelector.ItemTemplate的根控件上。
答案 1 :(得分:0)
该工具包使用此sig来响应点击。
private void OnItemContentTap(object sender, System.Windows.Input.GestureEventArgs e)
该示例定义了与
中的LongListMultiSelector构造分开的datatemplate<phone:PhoneApplicationPage.Resources>
部分并将其引用为
ItemTemplate="{StaticResource EmailItemTemplate}.
请参阅工具箱中的LongListMultiSelectorSample.xaml以获取示例。样本实际上是不完整的,一开始可能会令人困惑。只需忽略BuddiesPivotItem和GridModeItem,除非你想完成它并使整个过程发挥作用。