LongListMultiSelector阻止所选项目的手势事件

时间:2013-01-19 15:35:48

标签: c# xaml events windows-phone-8

在以下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。

2 个答案:

答案 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,除非你想完成它并使整个过程发挥作用。