0

我有这个模板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">

它仍然无法正常工作。

4

2 回答 2

1

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

我试图弄清楚如何解决它,但我没有找到解决方案。我添加了图片以更清楚地描述问题。蓝色框(在图片上)是点击事件引发的区域,红色框是没有发生任何事情的区域,当你点击那里时。当我使用列表框而不是使用 LongListSelector 时,一切都按预期正常工作。

但是我尝试了Silver Solver的建议,它确实对我有用。我想,你简单地犯了一个错误。

注意这个属性Background="Transparent"内部<Grid>元素,它放置在内部<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>    

PS Silver Solver非常感谢您,对不起,由于声誉小,我无法提高您的声誉。

于 2014-01-23T15:35:30.890 回答
0

确保 ItemTemplate 中的根元素具有背景设置,否则它不会注册点击。

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

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

于 2013-02-18T13:39:10.320 回答