прокрутка списка и проблема с обработчиком событий, Windows Phone 7 - PullRequest
1 голос
/ 11 июля 2011

Так что после решения одной проблемы, связанной со списками, я сталкиваюсь с другой.

У меня есть список с несколькими элементами. На этих предметах у меня есть обработчик событий, чтобы знать, когда человек выбрал предмет. Это простой обработчик события MouseLeftButtonDown. Однако всякий раз, когда я пытаюсь прокрутить список, я не могу, потому что событие срабатывает всякий раз, когда я кладу палец вниз.

В целом, как мне создать прокручиваемый список, когда у меня есть обработчики событий, определяющие, выбрал ли пользователь определенный элемент в списке?

код для отображения того, что у меня есть на странице:

<Grid x:Name="LayoutRoot">
    <controls:Panorama x:Name="Community" Title="Community">

        <!--Panorama item one-->
        <controls:PanoramaItem x:Name="Groups" Header="Groups">
            <ListBox x:Name="People" Margin="0,0,-12,0" SelectionChanged="StackPanel_SelectionChanged">
               <ListBoxItem x:Name="Peter">
                    <StackPanel Orientation="Horizontal" Margin="0,0,0,17">
                        <Image Height="100" Width="100" Source="/image002.jpg" Margin="12,0,9,0" Stretch="Fill" />
                        <StackPanel Width="311">
                            <TextBlock Text="Peter"  TextWrapping="Wrap" Style="{StaticResource PhoneTextExtraLargeStyle}"/>
                        </StackPanel>
                    </StackPanel>
            </ListBoxItem>
       .....
       //more of the same stackpanels as listed above, just with different Names

Если вы можете представить ряд этих стековых панелей, как бы вы могли сделать так, чтобы вы могли свободно прокручивать их?

MouseLeftButtonUp ... Это не идеально. Пожалуйста, скажите, что это не единственный способ. Есть ли простое исправление, например, размещение наложенной сетки или прокрутки, или что-то, где мне не нужно манипулировать событиями запуска / завершения для этого?

Помощь! (

1 Ответ

0 голосов
/ 11 июля 2011

Вместо этого вы можете использовать событие SelectionChanged .Просто обратите внимание, что он будет срабатывать, только если пользователь выберет элемент, который в данный момент не выбран.Это может не быть проблемой, если вы просто переходите на другую страницу после выбранной, но вы всегда можете использовать listbox.SelectedItem = -1 (после события), чтобы сбросить значение выбора, если это необходимо.

Редактировать: Запрос кода из комментария: Итак, установите ваше событие для запуска этого обработчика (так же, как вы установили событие LeftMouseUp):

private void myListBox_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
   //your handler code (I've used code from your previous question)
   var namers="";

   var lbi = sender as ListBoxItem;
   if(lbi != null)
   {
       namers= lbi.Name.ToString();


       //Although optional, it might be worth resetting the selection value 
       //as long as you don't need the value anymore
       myListBox.SelectedItem = -1;

       //Navigate to the next page
       NavigationService.Navigate(new Uri("/Page2.xaml?name=" + namers, UriKind.Relative));
    }

}
...