列表框滚动和事件处理程序问题,Windows Phone 7

时间:2011-07-11 01:38:11

标签: c# windows-phone-7 event-handling listbox scroll

因此在解决了有关列表框的一个问题后,我面对另一个问题。

我有一个包含多个项目的列表框。在这些项目上,我有一个事件处理程序来知道一个人何时选择了该项目。这是一个简单的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 :(得分:0)

您可以改用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));
    }

}