因此在解决了有关列表框的一个问题后,我面对另一个问题。
我有一个包含多个项目的列表框。在这些项目上,我有一个事件处理程序来知道一个人何时选择了该项目。这是一个简单的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 ......这并不完美。请说这不是唯一的方法。是否有一个简单的解决方法,例如放置一个重叠的网格或滚动查看器,或者我不需要为此操作开始/完成事件的东西?
帮助! :(
答案 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));
}
}