2013-02-18 2 views
0

У меня есть этот шаблон в LongListSelector:LongListSelector SelectionChanged не называется

<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 и не запускаю, если я нажимаю другое место на строке.

Любая идея, как исправить это?

Edit я попробовать это:

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

И это еще не будет работать.

ответ

0

Убедитесь, что ваш корневой элемент в ItemTemplate имеет набор фона, иначе он не будет регистрировать клики.

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

Если ваш селектор не имеет свойства фона, просто оберните его в сетку.

+0

Я пробовал, и он пока не работает – MTA

0

У меня была проблема, подобная вашей (LongListSelector error).

Я попытался выяснить, как решить его, но я не нашел решение. Я добавил изображение к , чтобы описать проблему более четко. Синяя рамка (на картинке) - это область при поднятии события крана, красным полем является область, когда ничего нет. Слушайте, когда вы постучате туда. Когда я использую Listbox вместо использования , LongListSelector работает нормально, как ожидалось.

Но я попробовал, что Silver Solver консультировал и это действительно работает для меня. думаю, вы простой сделал ошибка.

Обратите внимание это свойство фона = «Прозрачный» внутри <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>  

P.S. Silver Solver большое спасибо, извините, но я не могу увеличить вашу репутацию из-за небольшой репутации.