不会调用LongListSelector SelectionChanged

时间:2013-02-18 10:01:51

标签: c# wpf silverlight windows-phone-7

我在LongListSelector

中有这个模板
<local:SearchTemplateSelector.LoadMoreTemplate>
                            <DataTemplate>
                                <Grid>
                                    <Grid.RowDefinitions>
                                        <RowDefinition Height="Auto"/>
                                        <RowDefinition Height="*"/>
                                    </Grid.RowDefinitions>
                                    <TextBlock Text="Load more..." FontSize="30" Foreground="White" TextWrapping="Wrap" Grid.Row="0" 
                                               HorizontalAlignment="Center" VerticalAlignment="Center" Margin="0,35"/>
                                    <Rectangle Height="1" HorizontalAlignment="Stretch" VerticalAlignment="Top" Fill="White" Grid.Row="1" Opacity="0.3"/>
                                </Grid>
                            </DataTemplate>
                        </local:SearchTemplateSelector.LoadMoreTemplate>

这是LongListSelector

    <Controls:LongListSelector x:Name="searchList" Margin="0,0,0,0"  Background="Black" SelectionChanged="DidPressSelectSearchList" 
                               HorizontalContentAlignment="Stretch" KeyDown="UserPressEnterKeyBoard" Grid.Row="1">
        <Controls:LongListSelector.ItemTemplate>
            <DataTemplate>
                <local:SearchTemplateSelector Content="{Binding}" HorizontalContentAlignment="Stretch">

我有一个问题,当我在列表中按此行时,DidPressSelectSearchList仅在我按下TextBlock时才会调用,如果我按下行上的其他位置则不会触发。

知道怎么解决吗?

编辑我试试这个:

<local:SearchTemplateSelector Content="{Binding}" HorizontalContentAlignment="Stretch" Background="Transparent">

它仍然无法工作。

2 个答案:

答案 0 :(得分:1)

我遇到了像你这样的问题(LongListSelector error)。

  

我试图弄清楚如何   解决它,但我找不到解决方案。我把图片添加到了   更清楚地描述问题。蓝色框(图片上)是   点击事件提升时的区域,红色框是什么时候没有的区域   当你敲击那里时,就会发生当我使用Listbox而不是使用   LongListSelector按预期正常工作。

但我尝试了 Silver Solver ,我觉得这对我很有用。 我想,你这么简单就犯了错误。

请注意<Grid>元素中的此属性 Background =“Transparent”,该元素始终位于<DataTemplate><toolkit:LongListMultiSelector.ItemTemplate>内(代码位于下方)。

我认为您遇到了问题,因为您应该为<Grid>设置<Controls:LongListSelector.ItemTemplate>元素,然后将 Background =“Transparent”设置为<Grid>元素。然后你可以把<Grid>元素放在你想要的任何内容中。您还可以为Tap="Grid_Tap"元素添加事件<Grid>,这样只要您在<Grid>元素区域内点击它就会触发。

这是我的代码示例,请尝试:

<toolkit:LongListMultiSelector                    
                x:Name="LongListMultiSelector" 
                Margin="0,0,0,0"  
                ItemsSource="{Binding}"                     
                SelectionChanged="SelectionChanged"
                IsSelectionEnabledChanged="IsSelectionEnabledChanged"                              
                EnforceIsSelectionEnabled="False" 
                >
                <toolkit:LongListMultiSelector.ItemTemplate>
                    <DataTemplate>                            
                        <Grid Margin="0,0,0,17" 
                              Tap="Grid_Tap"                                       
                              HorizontalAlignment="Stretch" 
                              VerticalAlignment="Stretch"  
                              Background="Transparent">                                     
                            <TextBlock  Text="{Binding Text}"
                                        TextWrapping="NoWrap"
                                        Style="{StaticResource PhoneTextLargeStyle}"                                            
                                        HorizontalAlignment="Left"                                          
                                        />                                        
                        </Grid>                            
                    </DataTemplate> 
                </toolkit:LongListMultiSelector.ItemTemplate>    

P.S。 Silver Solver 非常感谢,很抱歉,但由于声誉不佳,我无法提高您的声誉。

答案 1 :(得分:0)

确保ItemTemplate中的根元素具有背景设置,否则它不会记录点击次数。

<DataTemplate>
            <local:SearchTemplateSelector Background="Transparent"...

如果您的选择器没有Background属性,只需将其包装在Grid中。