所以在解决了一个关于列表框的问题之后,我又面临另一个问题。
我有一个包含多个项目的列表框。在这些项目上,我有一个事件处理程序来知道人们何时选择了该项目。这是一个简单的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……它并不完美。请告诉我这不是唯一的办法。是否有一个简单的修复,比如放置一个覆盖的网格或滚动查看器,或者我不需要为此操作启动/完成事件的地方?
帮助!(
您可以使用SelectionChanged事件。只需注意,它只会在用户选择当前未选中的项时触发。如果您只是在选定后导航到另一个页面,这可能不是问题,但如果需要,您总是可以使用listbox.SelectedItem = -1
(在事件触发后)重置选择值。
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));
}
}