[英]LongListMultiSelector blocks gesture events for selected items
在以下XAML中,當在LongListMultiSelector
選擇任何TextBlock
時,該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>
基本上我正在尋找的是一種類似於標准Mail應用程序的行為,在選擇了一堆字母后,他們仍然接收Tap
事件,因為我仍然可以擴展/折疊它們中的任何一個(除了在我的情況下它是一個簡單的TextBlock
s而不是ExpanderView
s)。
在我的機器上正常工作。 當我點擊這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的根控件上。
該工具包使用此sig來響應tap。
private void OnItemContentTap(object sender, System.Windows.Input.GestureEventArgs e)
該示例定義了與。中的LongListMultiSelector構造分開的datatemplate
<phone:PhoneApplicationPage.Resources>
部分並將其引用為
ItemTemplate="{StaticResource EmailItemTemplate}.
有關示例,請參閱工具包中的LongListMultiSelectorSample.xaml。 樣本實際上是不完整的,一開始可能會令人困惑。 只需忽略BuddiesPivotItem和GridModeItem,除非您想完成它並使整個過程完成。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.